Hallo,
Hier mal ein etwas größerer Script, der ich für euch übersetze.
Es handelt sich um Uran inkl Radioaktive Zone (Dmg Zone) wenn ihr kein Strahlenanzug habt.
Das ganze ist in 4x prozessen fertig.
So, fangen wir mal an:
1. Geht in eure Functions.h und fügt folgendes unter class actions ein:
2. Erstellt eine neue sqf Datei namens fn_gatherUranium.sqf und fügt diese datei bei core/actions ein mit folgendem Inhallt:
Spoiler anzeigen
/*
File: fn_gatherUranium.sqf
Description:
Gathers Uranium?
*/
private["_sum","_dice"];
_dice=ceil(random 3);
_sum = ["uranium1",_dice,life_carryWeight,life_maxWeight] call life_fnc_calWeightDiff;
if(_sum > 0) then
{
life_action_inUse = true;
titleText["Sammle Uranabfall...","PLAIN"];
titleFadeOut 6;
sleep 6;
if(([true,"uranium1",_sum] call life_fnc_handleInv)) then
{
titleText[format["Du hast %1 Uranabfall gesammelt.",_sum],"PLAIN"];
};
};
life_action_inUse = false;
3. Erstellt eine neue sqf Datei namens fn_processActionDual.sqf und fügt diese datei bei core/actions ein mit folgendem Inhallt:
Spoiler anzeigen
/*
File: fn_processActionDual.sqf
Author: Bryan "Tonic" Boardwine
Description:
Master handling for processing an item.
*/
private["_vendor","_type","_itemInfo","_oldItem1","_oldItem2","_newItem","_cost","_upp","_hasLicense","_itemName","_oldVal","_oldVal1","_oldval2","_ui","_progress","_pgText","_cP","_speed"];
_vendor = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param;
_type = [_this,3,"",[""]] call BIS_fnc_param;
_speed = "medium";
//Error check
if(isNull _vendor OR _type == "" OR (player distance _vendor > 10)) exitWith {};
if ((_type == "uranium2") && (life_inv_puranium == 0)) exitWith {hint "Du hast kein Produkt, um das Uran zu lösen";};
//unprocessed item,processed item, cost if no license,Text to display (I.e Processing (percent) ..."
_itemInfo = switch (_type) do
{
case "uranium2": {["uranium2","puranium","uranium3",6000,"Legale Uran Auflösung"];};
case "uranium2b": {["uranium2","ipuranium","uranium3",6000,"Uran Auflösung"];};
default {[]};
};
//Error checking
if(count _itemInfo == 0) exitWith {};
//Setup vars.
_oldItem1 = _itemInfo select 0;
_oldItem2 = _itemInfo select 1;
_newItem = _itemInfo select 2;
_cost = _itemInfo select 3;
_upp = _itemInfo select 4;
_hasLicense = missionNamespace getVariable (([_type,0] call life_fnc_licenseType) select 0);
_itemName = [([_newItem,0] call life_fnc_varHandle)] call life_fnc_varToStr;
_oldVal1 = missionNamespace getVariable ([_oldItem1,0] call life_fnc_varHandle);
_oldVal2 = missionNamespace getVariable ([_oldItem2,0] call life_fnc_varHandle);
if(_oldVal1 <= _oldVal2) then
{
_oldVal = _oldVal1;
}
else
{
_oldVal = _oldVal2;
};
_cost = _cost * _oldVal;
//Some more checks
if(_oldVal == 0) exitWith {};
//Setup our progress bar.
disableSerialization;
5 cutRsc ["life_progress","PLAIN"];
_ui = uiNameSpace getVariable "life_progress";
_progress = _ui displayCtrl 38201;
_pgText = _ui displayCtrl 38202;
_pgText ctrlSetText format["%2 (1%1)...","%",_upp];
_progress progressSetPosition 0.01;
_cP = 0.01;
life_is_processing = true;
if(_hasLicense) then
{
while{true} do
{
sleep 0.25;
_cP = _cP + 0.01;
_progress progressSetPosition _cP;
_pgText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%",_upp];
if(_cP >= 1) exitWith {};
if(player distance _vendor > 10) exitWith {};
};
if(player distance _vendor > 10) exitWith {hint "Du musst in der nähe bleiben: 10m."; 5 cutText ["","PLAIN"]; life_is_processing = false;};
if(!([false,_oldItem1,_oldVal] call life_fnc_handleInv)) exitWith {5 cutText ["","PLAIN"]; life_is_processing = false;};
if(!([false,_oldItem2,_oldVal] call life_fnc_handleInv)) exitWith {5 cutText ["","PLAIN"]; life_is_processing = false;};
if(!([true,_newItem,_oldVal] call life_fnc_handleInv)) exitWith {5 cutText ["","PLAIN"]; [true,_oldItem1,_oldVal] call life_fnc_handleInv; [true,_oldItem2,_oldVal] call life_fnc_handleInv; life_is_processing = false;};
5 cutText ["","PLAIN"];
titleText[format["Du hast %1 zu %2 verarbeitet",_oldVal,_itemName],"PLAIN"];
life_is_processing = false;
}
else
{
if(life_cash < _cost) exitWith {hint format["Du brauchst $%1 um ohne Lizenz zu verarbeiten!",[_cost] call life_fnc_numberText]; 5 cutText ["","PLAIN"]; life_is_processing = false;};
while{true} do
{
sleep 0.5;
_cP = _cP + 0.01;
_progress progressSetPosition _cP;
_pgText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%",_upp];
if(_cP >= 1) exitWith {};
if(player distance _vendor > 10) exitWith {};
};
if(player distance _vendor > 10) exitWith {hint "Du musst in der nähe bleiben: 10m."; 5 cutText ["","PLAIN"]; life_is_processing = false;};
if(life_cash < _cost) exitWith {hint format["Du brauchst $%1 um ohne lizenz zu verarbeiten!",[_cost] call life_fnc_numberText]; 5 cutText ["","PLAIN"]; life_is_processing = false;};
if(!([false,_oldItem1,_oldVal] call life_fnc_handleInv)) exitWith {5 cutText ["","PLAIN"]; life_is_processing = false;};
if(!([false,_oldItem2,_oldVal] call life_fnc_handleInv)) exitWith {5 cutText ["","PLAIN"]; life_is_processing = false;};
if(!([true,_newItem,_oldVal] call life_fnc_handleInv)) exitWith {5 cutText ["","PLAIN"]; [true,_oldItem1,_oldVal] call life_fnc_handleInv; [true,_oldItem2,_oldVal] call life_fnc_handleInv; life_is_processing = false;};
5 cutText ["","PLAIN"];
titleText[format["Du hast %1 zu %2 zu $%3 verarbeitet",_oldVal,_itemName,[_cost] call life_fnc_numberText],"PLAIN"];
life_cash = life_cash - _cost;
life_is_processing = false;
};
4. Erstellt eine neue sqf Datei namens fn_processActionLsd.sqf und fügt diese datei bei core/actions ein mit folgendem Inhallt:
Spoiler anzeigen
/*
File: fn_processActionLsd.sqf
Author: Bryan "Tonic" Boardwine
Description:
Master handling for processing an item.
*/
private["_vendor","_type","_itemInfo","_oldItem","_newItem","_cost","_upp","_hasLicense","_itemName","_oldVal","_ui","_progress","_pgText","_cP"];
_vendor = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param;
_type = [_this,3,"",[""]] call BIS_fnc_param;
//Error check
if(isNull _vendor OR _type == "" OR (player distance _vendor > 10)) exitWith {};
//unprocessed item,processed item, cost if no license,Text to display (I.e Processing (percent) ..."
_itemInfo = switch (_type) do
{
case "uranium3": {["uranium3","uranium4",10000,"Uran trennen"]};
default {[]};
};
//Error checking
if(count _itemInfo == 0) exitWith {};
//Setup vars.
_oldItem = _itemInfo select 0;
_newItem = _itemInfo select 1;
_cost = _itemInfo select 2;
_upp = _itemInfo select 3;
_hasLicense = missionNamespace getVariable (([_type,0] call life_fnc_licenseType) select 0);
_itemName = [([_newItem,0] call life_fnc_varHandle)] call life_fnc_varToStr;
//_oldVal = missionNamespace getVariable ([_oldItem,0] call life_fnc_varHandle);
_oldVal = 1;
_cost = _cost * _oldVal;
//Some more checks
if(_oldVal == 0) exitWith {};
//Setup our progress bar.
disableSerialization;
5 cutRsc ["life_progress","PLAIN"];
_ui = uiNameSpace getVariable "life_progress";
_progress = _ui displayCtrl 38201;
_pgText = _ui displayCtrl 38202;
_pgText ctrlSetText format["%2 (1%1)...","%",_upp];
_progress progressSetPosition 0.01;
_cP = 0.01;
life_is_processing = true;
if(_hasLicense) then
{
titleText["Du musst jedes einzeln verarbeiten!","PLAIN"];
while{true} do
{
sleep 0.05;
_cP = _cP + 0.01;
_progress progressSetPosition _cP;
_pgText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%",_upp];
if(_cP >= 1) exitWith {};
if(player distance _vendor > 10) exitWith {};
};
if(player distance _vendor > 10) exitWith {hint "Du musst in der nähe bleiben: 10m"; 5 cutText ["","PLAIN"]; life_is_processing = false;};
if(!([false,_oldItem,_oldVal] call life_fnc_handleInv)) exitWith {5 cutText ["","PLAIN"]; life_is_processing = false;};
if(!([true,_newItem,_oldVal] call life_fnc_handleInv)) exitWith {5 cutText ["","PLAIN"]; [true,_oldItem,_oldVal] call life_fnc_handleInv; life_is_processing = false;};
5 cutText ["","PLAIN"];
titleText[format["Du hast %1 zu %2 verarbeitet",_oldVal,_itemName],"PLAIN"];
life_is_processing = false;
}
else
{
hint "Du kannst nicht ohne Lizenz verarbeiten.";
life_is_processing = false;
};
5. Geht in eure core\action\fn_processAction.sqf und fügt folgendes ein:
case "uranium1":
{
["uranium1","uranium2",5000,"Uran Reinigen"]
};
case "uranium4":
{
["uranium4","uranium",15000,"Uran Anreichern"]
};
6. Geht in eure core\config\fn_ItemWeight.sqf und fügt folgende dazu:
case "puranium": {5};
case "ipuranium": {3};
case "uranium1": {6};
case "uranium2": {4};
case "uranium3": {4};
case "uranium4": {4};
case "uranium": {3};
7. Geht in eure core\config\fn_licensePrice.sqf und fügt dies hinzu:
8. Geht in eure core_config_fn_licenseType.sqf und fügt folgendes bei case 0: hinzu:
case "uranium": {_var = "license_civ_uranium"};
case "uranium1": {_var = "license_civ_uranium"};
case "uranium2": {_var = "license_civ_uranium"};
case "uranium2b": {_var = "license_civ_uranium"};
case "uranium3": {_var = "license_civ_uranium"};
case "uranium4": {_var = "license_civ_uranium"};
Bei case 1:
case "license_civ_uranium": {_var = "uranium"};
case "license_civ_uranium": {_var = "uranium1"};
case "license_civ_uranium": {_var = "uranium2"};
case "license_civ_uranium": {_var = "uranium2b"};
case "license_civ_uranium": {_var = "uranium3"};
case "license_civ_uranium": {_var = "uranium4"};
9. Öffnet eure core\config\varHandle.sqf und fügt folgendes bei case: 0 hinzu:
case "puranium": {"life_inv_puranium"};
case "ipuranium": {"life_inv_ipuranium"};
case "uranium1": {"life_inv_uranium1"};
case "uranium2": {"life_inv_uranium2"};
case "uranium3": {"life_inv_uranium3"};
case "uranium4": {"life_inv_uranium4"};
case "uranium": {"life_inv_uranium"};
Bei case: 1
case "life_inv_puranium": {"puranium"};
case "life_inv_ipuranium": {"ipuranium"};
case "life_inv_uranium1": {"uranium1"};
case "life_inv_uranium2": {"uranium2"};
case "life_inv_uranium3": {"uranium3"};
case "life_inv_uranium4": {"uranium4"};
case "life_inv_uranium": {"uranium"};
10. Geht in eure core\config\fn_VarToStr.sqf und fügt folgendes hinzu:
case "life_inv_ipuranium": {"Illegale Uranlösung"};
case "life_inv_puranium": {"Legale Uranauflösung"};
case "life_inv_uranium1": {"Uranabfall"};
case "life_inv_uranium2": {"Gereinigtes Uran"};
case "life_inv_uranium3": {"Aufgelöstes Uran"};
case "life_inv_uranium4": {"Uran"};
case "life_inv_uranium": {"Angereichertes Uran"};
Unter //License Block noch das hier:
11. Geht in eure core\config\fn_virtshops.sqf und fügt einen neuen shop hinzu:
(Ihr könnt natürlich das uranium und das puranium auch in ein anderen Shop platzieren.) Denkt dran, puranium ist LEGAL.
und nun noch die Illegale Lösung hinzufügen.
Ich habe das so gemmacht, das man nur das ipuranium kaufen kann und diese in den Schwarzmarkt gemmacht. Heisst im Klartext, bei mir ist dieser Job nur auf Illegalem wege abzuschliessen.
12. Geht in eure core\config\fn_clothing_bruce.sqf und fügt jetzt der Strahlenanzug ein. Fügt nun am schluß der case: 0 dies hinzu:
Bitte achtet darauf, das kein Komma am schluß ist.
13. Geht in eure core\configuraiton.sqf und fügt nun folgende sachen hinzu:
life_inv_items =
"life_inv_puranium",
"life_inv_ipuranium",
"life_inv_uranium1",
"life_inv_uranium2",
"life_inv_uranium3",
"life_inv_uranium4",
"life_inv_uranium"
life_licenses =
life_illegal_items =
sell_array =
buy_array =
Auch hier bitte auf die Kommas achten!
14. Geht in eure core\init_survival.sqf und fügt folgendes ganz unten hinzu:
[] spawn
{
while {true} do
{
sleep 1.5;
if(life_inv_uranium2 != 0) then {
player forceWalk true;
player setFatigue 1;
hint "Du transportierst Uranium das sehr schwer ist, deswegen bewegst du dich langsamer!";
} else {
if(isForcedWalk player) then {
player forceWalk false;
};
};
};
};
[] spawn
{
while {true} do
{
private["_damage"];
sleep 1;
while {((player distance (getMarkerPos "Warm_Marker") < 150) && (player getVariable["Revive",TRUE]))} do
{
if(uniform player == "U_C_Scientist") then
{
hint "!!! Du betrittst die Radioaktive Sperrzone !!! Aber dein Schutzanzug schützt dich";
sleep 5;
}else
{
hint "!!! ACHTUNG RADIOAKTIVE ZONE !!! DU KANNST STERBEN, WENN DU KEINEN SCHUTZANZUG AN HAST";
_damage = damage player;
_damage = _damage + 0.1;
player setDamage (_damage);
[] call life_fnc_hudUpdate;
sleep 5;
};
};
};
};
Alles anzeigen
15. Jetzt erstellen wir noch die Zone. Geht in eure core/civilian/fn_zoneCreator.sqf und fügt folgendes hinzu:
//Create uran zones
{
_zone = createTrigger ["EmptyDetector",(getMarkerPos _x)];
_zone setTriggerArea[150,150,0,false];
_zone setTriggerActivation["CIV","PRESENT",true];
_zone setTriggerStatements["player in thislist","LIFE_Action_Uranium = player addAction['Sammle Uran Abfall',life_fnc_gatherUranium,'',0,false,false,'','!life_action_inUse'];","player removeAction LIFE_Action_Uranium;"];
} foreach _uranZones;
16. Öffnet eure core/vehicle/fn_vehStoreItem.sqf und sucht nach:
if(_ctrl == "goldbar" && {!(life_trunk_vehicle isKindOf "LandVehicle" OR life_trunk_vehicle isKindOf "House_F")}) exitWith {hint "You cannot store that in anything but a land vehicle!"};
und fügt darunter dies ein:
if(_ctrl == "uranium1" && {!(life_trunk_vehicle isKindOf "LandVehicle" OR life_trunk_vehicle isKindOf "House_F")}) exitWith {hint "Du kannst keinen Radioaktivien Uranabfall mit dem Heli transportieren!"};
So, nun geht ihr in euren Arma3 Editor.
17. Sucht euch auf eurer Map einen Platz aus, wo ihr gerne die Radioaktive Zone haben wollt. Wenn ihr eine stelle gefunden habt, geht wiefolgt vor.
erstellt einen Leeren Marker mit dem namen:
Mit diesem Marker, könnt ihr in einem Radius von 150 150 Uranabfall sammeln.
Erstellt einen neuen Marker, was für einen ist euch überlassen. (Ich empfelle Minenfeld [PB]) und gebt folgendes bei name ein:
und bei Text:
Der Marker ist dafür da, das ihr in einem Radius von 150 150 Damage kriegt.
Schaut, das alle 2 Marker aufeinander sind. Beide haben einen Radius von 150 150.
Nun kommen noch die verschiedene NPCs, die ihr erstellen müsst. Gebt jeweills folgendes in die INIT ein:
Uran Händler INIT:
this allowDamage false; this enableSimulation false; this addAction["Uran Händler",life_fnc_virt_menu,"uranium"];
Prozess 1:
this enableSimulation false; this allowDamage false; this addAction["Uran reinigen",life_fnc_processAction,"uranium1",0,false,false,"",' life_inv_uranium1 > 0 && !life_is_processing'];
Prozess 2:
this enableSimulation false; this allowDamage false; this addAction["Illegale Uranauflösung",life_fnc_processActionDual,"uranium2b",0,false,false,"",' life_inv_uranium2 > 0 && life_inv_ipuranium > 0 && !life_is_processing'];
this addAction["Legale Uranauflösung",life_fnc_processActionDual,"uranium2",0,false,false,"",' life_inv_uranium2 > 0 && life_inv_puranium > 0 && !life_is_processing'];
Prozess 3:
this enableSimulation false; this allowDamage false; this addAction["Uran trennen",life_fnc_processActionLsd,"uranium3",0,false,false,"",' life_inv_uranium3 > 0 && !life_is_processing'];
Prozess 4:
this enableSimulation false; this allowDamage false; this addAction["Uran anreichern",life_fnc_processAction,"uranium4",0,false,false,"",' life_inv_uranium4 > 0 && !life_is_processing'];
Lizenz:
this addAction[format["%1 ($%2)",["license_civ_uranium"] call life_fnc_varToStr,[(["uranium"] call life_fnc_licensePrice)] call life_fnc_numberText],life_fnc_buyLicense,"uranium",0,false,false,"",' !license_civ_uranium && playerSide == civilian '];
Das war es.
Nun habt ihr Angereichertes Uran und könnt dies verkaufen wo immer ihr es eingetragt habt.
Denkt daran, eine Illegale Uranauflösung oder eine Legale Auflösung müsst ihr kaufen um überhaupt an das ferige Uran zu kommen. Angenommen ihr sammelt 10 Uranabfall, so müsst ihr auch 10 Uranauflösungen kaufen. Pro Auflösung 1 Uran.
Wenn ihr irgentwo schwierigkeiten habt, dürft ihr gerne es hier posten und ich versuche euch so gut wie möglich zu helfen.
Viel spaß damit.
MfG
Noldy