Moin,
da ich aktuell mal wieder in der Entwicklung für ein neues Update stecke und so einiges umbaue bzw. einfacher mache habe ich mir gedacht ich lasse Euch mal eine Kleinigkeit da. Wir haben aktuell schon die Möglichkeit flüssige Stoffe (Bier, Oil, Kerosin) nur in Tankwagen zu lagern, allerdings ist mir das Ganze zu umständlich und fehleranfällig gewesen, daher habe ich das System mal ein wenig modifiziert. Im folgendem möchte ich Euch kurz zeigen wie man das relativ einfach umsetzen kann.
Wie immer gilt, das Tutorial darf gern verwendet allerdings nicht in andere Foren kopiert werden
Gut fangen wir einfach mal an.
1. Config_vItems.hpp
Achtung das ist nur ein Auszug und Ihr müsst alle Eure Items dahingehend erweitern!
class VirtualItems {
//Virtual Items
//SellItems
//Legal
class cement { //Reifen
variable = "cement";
displayName = "STR_Item_CementBag";
weight = 5;
buyPrice = -1;
sellPrice = 2000;
illegal = false;
edible = -1;
icon = "icons\ico_cement.paa";
showPrice = true;
liquid=false;
};
class oilp { //Öl
variable = "oilp";
displayName = "STR_Item_OilP";
weight = 4;
buyPrice = -1;
sellPrice = 5000;
illegal = false;
edible = -1;
icon = "icons\ico_oilProcessed.paa";
liquid=true;
};
};
Alles anzeigen
Die VirtualItems werden um ein Attribut erweitert. Dieses lautet liquidund ist true oder false.
2. Config_Vehicle.hpp
Auch hier müsste ihr die Änderung für alle Fahrzeuge vornehmen
class LifeCfgVehicles {
/*
* Vehicle Configs (Contains textures and other stuff)
*
* "price" is the price before any multipliers set in Master_Config are applied.
*
* Default Multiplier Values & Calculations:
* Civilian [Purchase, Sell]: [1.0, 0.5]
* Cop [Purchase, Sell]: [0.5, 0.5]
* Medic [Purchase, Sell]: [0.75, 0.5]
* ChopShop: Payout = price * 0.25
* GarageSell: Payout = price * [0.5, 0.5, 0.5, -1]
* Cop Impound: Payout = price * 0.1
* Pull Vehicle from Garage: Cost = price * [1, 0.5, 0.75, -1] * [0.5, 0.5, 0.5, -1]
* -- Pull Vehicle & GarageSell Array Explanation = [civ,cop,medic,east]
*
* 1: STRING (Condition)
* Textures config follows { Texture Name, side, {texture(s)path}, Condition}
* Texture(s)path follows this format:
* INDEX 0: Texture Layer 0
* INDEX 1: Texture Layer 1
* INDEX 2: Texture Layer 2
* etc etc etc
*
*/
class Default {
vItemSpace = -1;
conditions = "";
price = -1;
storeLiquid= false;
textures[] = {};
};
class C_Offroad_01_F {
vItemSpace = 80;
conditions = "";
price = 10000;
storeLiquid= false;
textures[] = {};
};
class C_Van_01_fuel_F {
vItemSpace = 150;
conditions = "";
price = 30000;
storeLiquid= true;
textures[] = {};
};
};
Alles anzeigen
Auch hier wurde ein zusätzliches Attribute eingefügt storeLiquidmit den Werten true oder false
3. fn_vehStoreItem.sqf
#include "..\..\script_macros.hpp"
#define ctrlSelData(ctrl) (lbData[##ctrl,(lbCurSel ##ctrl)])
/*
File: fn_vehStoreItem.sqf
Author: Bryan "Tonic" Boardwine
modified by moeck
Description:
Used in the vehicle trunk menu, stores the selected item and puts it in the vehicles virtual inventory
if the vehicle has room for the item.
*/
private ["_ctrl","_num","_totalWeight","_itemWeight","_veh_data","_inv","_index","_val"];
disableSerialization;
if ((life_trunk_vehicle getVariable ["trunk_in_use_by",player]) != player) exitWith { closeDialog 0; hint localize "STR_MISC_VehInvUse"; };
_ctrl = ctrlSelData(3503);
_num = ctrlText 3506;
if (!([_num] call TON_fnc_isnumber)) exitWith {hint localize "STR_MISC_WrongNumFormat";};
_num = parseNumber(_num);
if (_num < 1) exitWith {hint localize "STR_MISC_Under1";};
_totalWeight = [life_trunk_vehicle] call life_fnc_vehicleWeight;
_itemWeight = ([_ctrl] call life_fnc_itemWeight) * _num;
_veh_data = life_trunk_vehicle getVariable ["Trunk",[[],0]];
_inv = _veh_data select 0;
//Hier wird geprüft ob das auch in Fahrzeug passt
_fueltruck = M_CONFIG(getNumber,"LifeCfgVehicles",(typeOf life_trunk_vehicle),"storeLiquid");
_liquidItem = M_CONFIG(getNumber,"VirtualItems",_ctrl,"liquid");
if ((_liquidItem isEqualTo 1) && (_fueltruck isEqualTo 0)) exitWith {hint "BISSU IRRE? Dat Zeug wuerde ueberall auslaufen! Das Fahrzeug kann nur feste Stoffe transportieren!"}; //kann man noch lokalisieren :-P
if ((_liquidItem isEqualTo 0) && (_fueltruck isEqualTo 1)) exitWith {hint "Ey Jung! Dat passt nich durch den Stutzen! Tankwagen sind für Flüssigkeiten da!"}; //kann man noch lokalisieren :-P
if (_ctrl == "goldbar" && {!(life_trunk_vehicle isKindOf "LandVehicle")}) exitWith {hint localize "STR_NOTF_canOnlyStoreInLandVeh";};
if (_ctrl == "money") then {
_index = [_ctrl,_inv] call TON_fnc_index;
if (CASH < _num) exitWith {hint localize "STR_NOTF_notEnoughCashToStoreInVeh";};
if (_index isEqualTo -1) then {
_inv pushBack [_ctrl,_num];
} else {
_val = _inv select _index select 1;
_inv set[_index,[_ctrl,_val + _num]];
};
CASH = CASH - _num;
[0] call SOCK_fnc_updatePartial;
life_trunk_vehicle setVariable ["Trunk",[_inv,(_veh_data select 1) + _itemWeight],true];
[life_trunk_vehicle] call life_fnc_vehInventory;
} else {
if (((_totalWeight select 1) + _itemWeight) > (_totalWeight select 0)) exitWith {hint localize "STR_NOTF_VehicleFullOrInsufCap";};
if (!([false,_ctrl,_num] call life_fnc_handleInv)) exitWith {hint localize "STR_CouldNotRemoveItemsToPutInVeh";};
_index = [_ctrl,_inv] call TON_fnc_index;
if (_index isEqualTo -1) then {
_inv pushBack [_ctrl,_num];
} else {
_val = _inv select _index select 1;
_inv set[_index,[_ctrl,_val + _num]];
};
life_trunk_vehicle setVariable ["Trunk",[_inv,(_veh_data select 1) + _itemWeight],true];
[life_trunk_vehicle] call life_fnc_vehInventory;
};
Alles anzeigen
Damit sind wir auch schon fertig
Ist nichts Großes aber ganz hilfreich wenn man nicht nur Sand / Kupfer / ... als Route machen möchte. Natürlich könnte man das auch noch weiterspinnen und die Fahrzeugauswahl auf weitere Sachen einschränken. Dem Ganzen sind eigentlich keine Grenzen gesetzt
Gruß,
moeck