Sehr gut, und damit kann ich mit der Windows(aktion10) Taste also wiederbeleben?
Weil es mit Ace ja nicht geht!
Also genau so habe ich es drin
Schön, dass du den Weg zu NodeZone.net gefunden hast! Aktuell bist du nicht angemeldet und kannst deshalb nur eingeschränkt auf unsere Community zugreifen. Um alle Funktionen freizuschalten, spannende Inhalte zu entdecken und dich aktiv einzubringen, registriere dich jetzt kostenlos oder melde dich mit deinem Account an.
Sehr gut, und damit kann ich mit der Windows(aktion10) Taste also wiederbeleben?
Weil es mit Ace ja nicht geht!
Also genau so habe ich es drin
Ich arbeite mit der 3.1.4.8
Falls es dich noch interessiert.
Ich habe es nun so gelöst, dass zum Wiederbeleben, das alte system verwendet wird.
Allerdings habe ich dem wiederbelebten Schaden hinzugefügt, sodass die Sanis, nach dem Reanimieren dennoch was zu tun haben:
in der core\medical\fn_revieved.sqf wird zwischen dem Abschnitten, der ACE Schaden hinzugefügt:
//Bring me back to life.
player setDir _dir;
player setPosASL (visiblePositionASL life_corpse);
life_corpse SVAR ["Revive",nil,TRUE];
life_corpse SVAR ["name",nil,TRUE];
[life_corpse] remoteExecCall ["life_fnc_corpse",RANY];
deleteVehicle life_corpse;
player SVAR ["Revive",nil,TRUE];
player SVAR ["name",nil,TRUE];
player SVAR ["Reviving",nil,TRUE];
[] call life_fnc_playerSkins;
[] call life_fnc_hudUpdate; //Request update of hud.
Alles anzeigen
Etwa SO:
//Bring me back to life.
player setDir _dir;
player setPosASL (visiblePositionASL life_corpse);
life_corpse SVAR ["Revive",nil,TRUE];
life_corpse SVAR ["name",nil,TRUE];
[life_corpse] remoteExecCall ["life_fnc_corpse",RANY];
deleteVehicle life_corpse;
[player, 0.30, "Torso", "stab"] call ace_medical_fnc_addDamageToUnit;
[player, 0.50, "Body", "stab"] call ace_medical_fnc_addDamageToUnit;
[player, 0.60, "leg_r", "stab"] call ace_medical_fnc_addDamageToUnit;
[player, 0.75, "leg_l", "stab"] call ace_medical_fnc_addDamageToUnit;
player SVAR ["Revive",nil,TRUE];
player SVAR ["name",nil,TRUE];
player SVAR ["Reviving",nil,TRUE];
[] call life_fnc_playerSkins;
[] call life_fnc_hudUpdate; //Request update of hud.
Alles anzeigen
Sry hat sich erledigt...
War eine missinterpretation eines Users...
Wir haben über 150 Items.. es dauert aber nicht so lange.
Alles was 4 Sek. was lange dauert ist mein Schließfachscript....
Hu Leute,
mal ne frage... vllt hat jemand auch das problem (gehabt) und kennt eine Lösung, oder zumindest einen Ansatz.
In egal, welchem Menü (Shops, Kofferraum etc) werden die Spielerseitigen ZItems erst nach ca ~3-4 Sekunden geladen.
Die Seite der NPCs wird ja erst hinterher geladen. Hier ist dann alles sofort da.
Kurze Infos:
Über 150 life_inv_items
MOD Server
Altis Life 3.1.4.8
[lexicon]extDB[/lexicon] v35
CPU Intel i7 2600K
Ram 16 GB DDR3
HDD 120 GB SSD
Battleye
ZitatUpdate des BattlEye Service fehlgeschlagen. Der Hauptserver ist offline oder nicht erreichbar. Bitte vergewissern Sie sich, dass Sie mit dem Internet verbunden sind und dass die Datei BEService.exe nicht von einer Firewall blockiert wird.
Solange der server nicht geht, wird Battleye diese dll´s blockieren...
Komme selber nicht auf unseren Server..
Alles anzeigenHabe jetzt mehrere Sachen getestet das letzte ist das hier
Spoiler anzeigen
_vehicle = createVehicle ["C_Hatchback_01_sport_F", position player, [], 0, "NONE"];
waitUntil {!isNil "_vehicle"}; //Wait?
_vehicle allowDamage false; //Temp disable damage handling..
_vehicle lock 2;
_vehicle setVectorUp (surfaceNormal postition player);
_vehicle setDir (markerDir _position_player);
_vehicle setPos (position player);
_vehicle allowDamage true;
[[_vehicle,_colorIndex],"life_fnc_colorVehicle",true,false] spawn life_fnc_MP;
[_vehicle] call life_fnc_clearVehicleAmmo;
[[_vehicle,"trunk_in_use",false,true],"TON_fnc_setObjVar",false,false] spawn life_fnc_MP;
//life_vehicles set[count life_vehicles,_vehicle]; //Add err to the chain.
life_vehicles pushBack _vehicle;
[[getPlayerUID player,playerSide,_vehicle,1],"TON_fnc_keyManagement",false,false] call life_fnc_MP; _vehicle disableTIEquipment true; //No Thermals.. They're cheap but addictive.
life_vehicles pushBack _vehicle;
[[(getPlayerUID player),playerSide,_vehicle,_colorIndex],"TON_fnc_vehicleCreate",false,false] spawn life_fnc_MP;
[0] call SOCK_fnc_updatePartial;Leider kann ich das Fahrzeug nicht öffnen und habe auch keinen Schüssel dafür, vermutlich kann das so auch nicht funktionieren richtig ?^^
Da sind stellen drin, die nicht für die 4.x sind. Das versuche ich dir zu sagen!
Ich zeig dir mal aus beiden Sachen, die ich geschrieben habe die selben Zeilen: (NUR 2 DAVON! ES SIND MEHRERE)
3.1.4.8
[[(getPlayerUID player),playerSide,_vehicle,_colorIndex],"TON_fnc_vehicleCreate",false,false] spawn life_fnc_MP;
[[getPlayerUID player,playerSide,_vehicle,1],"TON_fnc_keyManagement",false,false] call life_fnc_MP;
4.x
[(getPlayerUID player),CIV,_vehicle,_colorIndex] remoteExecCall ["TON_fnc_vehicleCreate",RSERV];
[getPlayerUID player,CIV,_vehicle,1] remoteExecCall ["TON_fnc_keyManagement",RSERV];
Du hast wegen meinem Vorpost das Falsche drin!
Eigentlich hatte ich dir das schon einigermaßen angepasst...
Das ist für die 3.1.4.x
Du hast die 4.x
Zitat von stolzerrabeHINWEIS:
_displayName = FETCH_CONFIG2(getText,CONFIG_VEHICLES,(typeOf _veh),"displayName");
Dies muss auf jedenfall angepasst werden.
EBENSO sollte das ganze Script deinen Bedürfnissen angepasst werden.
DAS GESAMMTE SCRIPT WIRD SEHR WAHRSCHEINLICH NICHT SO LAUFEN!
Hier wie gesagt, muss jemand ran, der mit der 4.x arbeitet.
Spoiler anzeigen
SQL Alles anzeigen#include "..\..\script_macros.hpp" private["_veh","_upp","_ui","_progress","_pgText","_cP","_displayName","_test"]; _veh = cursorTarget; life_interrupted = false; if(isNull _veh) exitwith {}; if((_veh isKindOf "Car") OR (_veh isKindOf "Ship") OR (_veh isKindOf "Air")) then { if("ToolKit" in (items player)) then { life_action_inUse = true; _displayName = FETCH_CONFIG2(getText,CONFIG_VEHICLES,(typeOf _veh),"displayName"); _upp = format[localize "STR_NOTF_Repairing",_displayName]; //Setup our progress bar. disableSerialization; 5 cutRsc ["life_progress","PLAIN"]; _ui = GVAR_UINS "life_progress"; _progress = _ui displayCtrl 38201; _pgText = _ui displayCtrl 38202; _pgText ctrlSetText format["%2 (1%1)...","%",_upp]; _progress progressSetPosition 0.01; _cP = 0.01; while{true} do { if(animationState player != "AinvPknlMstpSnonWnonDnon_medic_1") then { [player,"AinvPknlMstpSnonWnonDnon_medic_1",true] remoteExecCall ["life_fnc_animSync",RCLIENT]; player switchMove "AinvPknlMstpSnonWnonDnon_medic_1"; player playMoveNow "AinvPknlMstpSnonWnonDnon_medic_1"; }; sleep 0.27; _cP = _cP + 0.01; _progress progressSetPosition _cP; _pgText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%",_upp]; if(_cP >= 1) exitWith {}; if(!alive player) exitWith {}; if(player != vehicle player) exitWith {}; if(life_interrupted) exitWith {}; }; life_action_inUse = false; 5 cutText ["","PLAIN"]; player playActionNow "stop"; if(life_interrupted) exitWith {life_interrupted = false; titleText[localize "STR_NOTF_ActionCancel","PLAIN"]; life_action_inUse = false;}; if(player != vehicle player) exitWith {titleText[localize "STR_NOTF_ActionInVehicle","PLAIN"];}; _vehicle = createVehicle ["C_Hatchback_01_sport_F", position player, [], 0, "NONE"]; waitUntil {!isNil "_vehicle" && {!isNull _vehicle}}; _vehicle allowDamage false; _vehicle setVectorUp (surfaceNormal position player); _vehicle lock 2; [_vehicle,_colorIndex] call life_fnc_colorVehicle; [_vehicle] call life_fnc_clearVehicleAmmo; [_vehicle,"trunk_in_use",false,true] remoteExecCall ["TON_fnc_setObjVar",RSERV]; [_vehicle,"vehicle_info_owners",[[getPlayerUID player,profileName]],true] remoteExecCall ["TON_fnc_setObjVar",RSERV]; _vehicle disableTIEquipment true; _vehicle allowDamage true; life_vehicles pushBack _vehicle; [getPlayerUID player,CIV,_vehicle,1] remoteExecCall ["TON_fnc_keyManagement",RSERV]; [(getPlayerUID player),CIV,_vehicle,_colorIndex] remoteExecCall ["TON_fnc_vehicleCreate",RSERV]; [0] call SOCK_fnc_updatePartial; }; };
Du musst auf jedenfall die _colorIndex mit eintragen!
Diese enhält den Skin, oder du setzt ein random Script ein, welches einen zufälligen ColorIndex wählt. Somit weiss man nie, welches Skin man bekommt
Und wenn du wirklich Basiswissen nicht verstehst, solltest du nich solche "Fortgeschrittene" Scripte versuchen zusammen-zu-schustern, nur weil du auf anderem Server sowas gesehen hast.
Zuerst solltest du dir das Basiswissen aneignen.
Solche Features kann man dem Server auch hinzufügen, wenn man alles andere soweit hat!
Ich und andere helfen mit Sicherheit gerne jedem User, aber zumindest finde ich, dass das Verständniss für grundlegene Config-Einstellungen und hinzufügen von Items, sowie die Abhängigkeit und Strukturierung der Scripte, schon vorhanden sein sollte.
Nur, wie ich es bei dir herauslese, fehlt dir jegliches Verständnis, überhaupt eine Programmiersprache zu lesen... - Das ist kein Angriff, oder ähnliches. So kommt es mir nur vor...
Ist auch nicht weiter schlimm. Jeder hat mal bei 0 Angefangen, nur dann solltest du vllt ersteinmal lernen, wie man überhaupt mit dem Framework umgeht.
Wie ich bereits erwähnte wird keiner eine "hier hast du - bau einfach ein - das ist narrensicher - und keiner kann es dir klauen" Lösung bieten.
Erstmal riesen Dank das du dir so viel Mühe machst!
Ich bekomme es leider trotzdem nicht geregelt.
Kein Dingen...
Aber sry, ich muss dann leider passen, ich selber nutzt die 3.4.1.8 und nicht die 4.x ... Da müsste sich jemand anderes dranhängen.
Was du allerdings missverstehst, ist mein Gedankenanstoß...
Zu diesem Part:
case (_item == "HatchBackBausatz"):
{
if(([false,_item,1] call life_fnc_handleInv)) then
{
[] call life_fnc_baueHatchBack;
};
};
Hatte ich geschrieben:
Also ich würde aus "A" + "B" + "C" ein "Z-Item" machen => life_inv_HatchBackBausatz
Dann dieses in der UseItem nutzen.
Das bedeutet:
Du musst ein Item (den Bausatz für das bestimmte Auto), welches durch deine Materialien A, B, C anlegen.
Dies geht in der 4.0 in der File: Config_vItems.hpp
class Hatchback_Bausatz{
variable = "hatchbackBausatz";
displayName = "Hatchback Bausatz";
weight = 90;
buyPrice = -1;
sellPrice = 44000;
illegal = false;
edible = -1;
icon = "";
};
Dieses Item [hatchbackBausatz] muss nun nutzbar gemacht werden in core\pmenu\fn_useItem.sqf
Hier wäre dieser Code richtig. Allerdings sieht er bei der 4.x anders aus. Etwa so:
case (EQUAL(_item,"hatchbackBausatz")): {
if(([false,_item,1] call life_fnc_handleInv)) then {
[] call life_fnc_BaueHatchback;
};
};
Dazu die fn_BaueHatchback.sqf sollte in etwa so aussehen und gehört in core\actions
Und der Eintrag in der Functions.hpp unter :
HINWEIS:
_displayName = FETCH_CONFIG2(getText,CONFIG_VEHICLES,(typeOf _veh),"displayName");
Dies muss auf jedenfall angepasst werden.
EBENSO sollte das ganze Script deinen Bedürfnissen angepasst werden.
DAS GESAMMTE SCRIPT WIRD SEHR WAHRSCHEINLICH NICHT SO LAUFEN!
Hier wie gesagt, muss jemand ran, der mit der 4.x arbeitet.
#include "..\..\script_macros.hpp"
private["_veh","_upp","_ui","_progress","_pgText","_cP","_displayName","_test"];
_veh = cursorTarget;
life_interrupted = false;
if(isNull _veh) exitwith {};
if((_veh isKindOf "Car") OR (_veh isKindOf "Ship") OR (_veh isKindOf "Air")) then {
if("ToolKit" in (items player)) then {
life_action_inUse = true;
_displayName = FETCH_CONFIG2(getText,CONFIG_VEHICLES,(typeOf _veh),"displayName");
_upp = format[localize "STR_NOTF_Repairing",_displayName];
//Setup our progress bar.
disableSerialization;
5 cutRsc ["life_progress","PLAIN"];
_ui = GVAR_UINS "life_progress";
_progress = _ui displayCtrl 38201;
_pgText = _ui displayCtrl 38202;
_pgText ctrlSetText format["%2 (1%1)...","%",_upp];
_progress progressSetPosition 0.01;
_cP = 0.01;
while{true} do {
if(animationState player != "AinvPknlMstpSnonWnonDnon_medic_1") then {
[player,"AinvPknlMstpSnonWnonDnon_medic_1",true] remoteExecCall ["life_fnc_animSync",RCLIENT];
player switchMove "AinvPknlMstpSnonWnonDnon_medic_1";
player playMoveNow "AinvPknlMstpSnonWnonDnon_medic_1";
};
sleep 0.27;
_cP = _cP + 0.01;
_progress progressSetPosition _cP;
_pgText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%",_upp];
if(_cP >= 1) exitWith {};
if(!alive player) exitWith {};
if(player != vehicle player) exitWith {};
if(life_interrupted) exitWith {};
};
life_action_inUse = false;
5 cutText ["","PLAIN"];
player playActionNow "stop";
if(life_interrupted) exitWith {life_interrupted = false; titleText[localize "STR_NOTF_ActionCancel","PLAIN"]; life_action_inUse = false;};
if(player != vehicle player) exitWith {titleText[localize "STR_NOTF_ActionInVehicle","PLAIN"];};
_vehicle = createVehicle ["C_Hatchback_01_sport_F", position player, [], 0, "NONE"];
waitUntil {!isNil "_vehicle" && {!isNull _vehicle}};
_vehicle allowDamage false;
_vehicle setVectorUp (surfaceNormal position player);
_vehicle lock 2;
[_vehicle,_colorIndex] call life_fnc_colorVehicle;
[_vehicle] call life_fnc_clearVehicleAmmo;
[_vehicle,"trunk_in_use",false,true] remoteExecCall ["TON_fnc_setObjVar",RSERV];
[_vehicle,"vehicle_info_owners",[[getPlayerUID player,profileName]],true] remoteExecCall ["TON_fnc_setObjVar",RSERV];
_vehicle disableTIEquipment true;
_vehicle allowDamage true;
life_vehicles pushBack _vehicle;
[getPlayerUID player,CIV,_vehicle,1] remoteExecCall ["TON_fnc_keyManagement",RSERV];
[(getPlayerUID player),CIV,_vehicle,_colorIndex] remoteExecCall ["TON_fnc_vehicleCreate",RSERV];
[0] call SOCK_fnc_updatePartial;
};
};
Alles anzeigen
Austauschen musst du eigentlich nur die CLASSNAMES der Autos...
Habe mal versucht es dir etwas zu zerstückeln...
Du bräuchtest also _vehicle = createVehicle ["C_Hatchback_01_sport_F", position player, [], 0, "NONE"];
So ist das zusammenhängende Aufgebaut.
Ich hoffe ich kann damit dir, und jedem, der sich auch daran versuchen will, etwas helfen.
Leider nein, ich mache das ganze hier seit gut 4 Wochen. Ich finde da ganz sicher alles aber meine Kentnisse reichen nicht um mir das raus zu suchen und umzuschreiben was ich benötige. Vorallem weiß ich dann auch immer noch nicht wie ich das Fahrzeug ins Inventar bekomme.
Also dann reichen deine Kenntnisse scheinbar doch nicht aus. Sry.
Also ich würde aus "A" + "B" + "C" ein "Z-Item" machen => life_inv_HatchBackBausatz
Dann dieses in der UseItem nutzen.
case (_item == "HatchBackBausatz"):
{
if(([false,_item,1] call life_fnc_handleInv)) then
{
[] call life_fnc_baueHatchBack;
};
};
Dann baust du dir eine fn_baueHatchBack.sqf
DIESE SACHEN SOLLTEN ANGEPASST WERDEN...
Es wird dein Auto gespawnt...
Es wird dein Key hinzugefügt und in die Datenbank eingetragen...
_vehicle = createVehicle [_className, (getMarkerPos _spawnPoint), [], 0, "NONE"];
waitUntil {!isNil "_vehicle"}; //Wait?
_vehicle allowDamage false; //Temp disable damage handling..
_vehicle lock 2;
_vehicle setVectorUp (surfaceNormal (getMarkerPos _spawnPoint));
_vehicle setDir (markerDir _spawnPoint);
_vehicle setPos (getMarkerPos _spawnPoint);
[[_vehicle,_colorIndex],"life_fnc_colorVehicle",true,false] spawn life_fnc_MP;
[_vehicle] call life_fnc_clearVehicleAmmo;
[[_vehicle,"trunk_in_use",false,true],"TON_fnc_setObjVar",false,false] spawn life_fnc_MP;
[[_vehicle,"vehicle_info_owners",[[getPlayerUID player,profileName]],true],"TON_fnc_setObjVar",false,false] spawn life_fnc_MP;
_vehicle disableTIEquipment true; //No Thermals.. They're cheap but addictive.
life_vehicles pushBack _vehicle;
[[getPlayerUID player,playerSide,_vehicle,1],"TON_fnc_keyManagement",false,false] spawn life_fnc_MP;
[[(getPlayerUID player),playerSide,_vehicle,_colorIndex],"TON_fnc_vehicleCreate",false,false] spawn life_fnc_MP;
[0] call SOCK_fnc_updatePartial;
Alles anzeigen
Dieses "UseItem" ruft dann dein Script auf, welches das Auto spawnen lässt, und dazu schaust du mal in der VehicleShopBuy usw. was aufgerufen wird, um es zu Speichern.
-- Grober Gedankenvorgschlag --- KEIN VOLLSTÄNDIGES SCRIPT!! --
Wenn du den Bug nicht schlimm findest, dann ist das halt so.
Wo ist da die Fairness?
Und das dupen, zB gleichzeitiges öffnen des Kofferraum. Auch hier gibt es eine simple Lösung:
Ich nutze mal die Funktion von Tonic
if([civilian,getPos player,10] call life_fnc_nearUnits) exitWith {
hint "Eine andere Person ist zu Nahe!";
};
So lässt sich zB dupen durch gleichzeitiges öffnen verhindern
Da waren einige Fehler drin...
zB
standen Zeilen wie:
//add new items if players items where deleted
if (_inputItemsDeleted) then { if (!_hasLicense) then { life_cash = life_cash - (_processingCost * _productionAmount); };
als
//add new items if players items where deletedif
(_inputItemsDeleted) then { if (!_hasLicense) then { life_cash = life_cash - (_processingCost * _productionAmount); };
Das hätte nicht funktioniert.
Habe es geändert, sofern ich nun nicht noch was übersehen habe... ist immerhin halb 3
Jedenfalls sehe ich gerade, dass du für die 4.0 suchst?
Das Script ist von 2014. Somit garantiere ich dir nicht, dass es in der 4.0 funzt.
Testen...
/*
author: preller @ freudenhaus <[email protected]>
for Freudenhaus Altis Life** processMulitpleItems.sqf*
processes any number of input items into one output item.
progress bar is from bryan "tonic" boardwines fn_processAction.sqf.**
Please feel free to use and modify it, but remember to credit the author.**
PARAMS:* _this select 3: String - processor type*
*/
private ["_inputItems", "_outputItem", "_inputItemsNeeded", "_outputItemAmount", "_itemsInv", "_itemsNeeded", "_inputItemsDeleted", "_ui", "_progress", "_pgText", "_cP", "_productionAmount", "_possibleProductionAmount","_processor","_formatedProcessingInfo","_hasLicense","_licenseNeeded","_processingCost","_type","_productionInfo"];
if (isServer) exitWith {};
if (life_is_processing) exitWith {hint "Der Kollege ist beschäftigt. Bitte nicht stressen!";};
//parameter
_processor = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param;
_type = [_this,3,"",[""]] call BIS_fnc_param;
//Error check. taken from tonic.
if(isNull _processor OR _type == "" OR (player distance _processor > 5)) exitWith {};
if(vehicle player != player) exitwith {hint format["Du darfst nicht im Fahrzeug sitzen"];};
life_is_processing = true;
//define your production line here
_productionInfo = switch (_type) do
{
case "test1": {[["water","apple"],[2,2],"goldendonat",1,"driver",5000];};
case "test2": {[["water","apple","peach"],[3,2,1],"tuna",2,"driver",10000];};
case "test3": {[["water","apple","peach","rabbit"],[1,2,1,4],"goldbar",4,"boat",20000];};
default {[]};
};
//initialize
_inputItems = _productionInfo select 0;
_inputItemsNeeded = _productionInfo select 1;
_outputItem = _productionInfo select 2;
_outputItemAmount = [(_productionInfo select 3),0,0,[0]] call BIS_fnc_param;
_licenseNeeded = _productionInfo select 4;
_processingCost = [(_productionInfo select 5),0,0,[0]] call BIS_fnc_param;
_hasLicense = missionNamespace getVariable (([_licenseNeeded,0] call life_fnc_licenseType) select 0);
_inputItemsDeleted = true;_productionAmount = 9999;
//infinite
if ((count _inputItems) != (count _inputItemsNeeded)) exitWith {
diag_log format["ERROR: ProcessMultipleItems falsch initialisiert: Anzahl InputItems ungleich Anzahl InputItem Kosten"];
life_is_processing = false;};
//check if the player has enough items and determine how much he can produce
for "_x" from 0 to ((count _inputItems) - 1) do
{
//get current amount player has
_itemsInv = missionNamespace getVariable ([(_inputItems select _x),0] call life_fnc_varHandle);
_itemsNeeded = _inputItemsNeeded select _x;
//calculate possible amount of processing cycles
_possibleProductionAmount = floor (_itemsInv / _itemsNeeded);
if (_possibleProductionAmount < _productionAmount) then
{
_productionAmount = _possibleProductionAmount;
};
};
//exit if the player doenst have the required items for one process
if (_productionAmount < 1) exitWith { hint "Du hast nicht genug Materialien dabei"; life_is_processing = false;};
//check for cash if the player doesnt have the license and calculate possible max production
if (!_hasLicense) then
{
//determine max production by money
if ((floor (life_cash / _processingCost)) < _productionAmount) then
{
_productionAmount = floor (life_cash / _processingCost);
};
};
//exit if the player doenst have the required money for one process
if (_productionAmount < 1) exitWith { hint "Du hast nicht genug Geld dabei"; life_is_processing = false;};
//Setup our progress bar. taken from tonic.
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)...","%","Bei der Herstellung."];
_progress progressSetPosition 0.01;
_cP = 0.01;
//progress bar. taken from tonic.
while{true} do
{
sleep 0.3;
_cP = _cP + 0.01;
_progress progressSetPosition _cP;
_pgText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%","Bei der Herstellung."];
if(_cP >= 1) exitWith {};
if(player distance _processor > 10) exitWith {};
};
if(player distance _processor > 10) exitWith {hint "Du hast dich zu weit entfernt! Bleib dichter dran";
5 cutText ["","PLAIN"];
life_is_processing = false;};
//substract items
for "_x" from 0 to ((count _inputItems) - 1) do
{
if (!([false,(_inputItems select _x),((_inputItemsNeeded select _x) * _productionAmount)] call life_fnc_handleInv)) then
{
_inputItemsDeleted = false;
};
};
//add new items if players items where deleted
if (_inputItemsDeleted) then
{
if (!_hasLicense) then
{
life_cash = life_cash - (_processingCost * _productionAmount);
};
//add the new item
if (!([true,_outputItem,(_outputItemAmount * _productionAmount)] call life_fnc_handleInv)) then
{
hint format["Ups. Beim produzieren ist was schiefgelaufen. Irgendein Admin ist Schuld! Ich nicht. Gruß preller"];
diag_log format["ERROR: fn_processMultipleItems - new item(s) are not added"];
};
//format output
_formatedProcessingInfo = "Du hast";
for "_x" from 0 to ((count _inputItems) - 2) do
{
_formatedProcessingInfo = _formatedProcessingInfo + format[" %1 %2,",((_inputItemsNeeded select _x) * _productionAmount),(_inputItems select _x)];
};
_formatedProcessingInfo = _formatedProcessingInfo + format[" und %1 %2 zu %4 %3 verarbeitet",((_inputItemsNeeded select ((count _inputItemsNeeded) - 1)) * _productionAmount),(_inputItems select ((count _inputItems) - 1)),_outputItem,(_outputItemAmount * _productionAmount)];
5 cutText ["","PLAIN"];
titleText[format["%1",_formatedProcessingInfo],"PLAIN"];
};
life_is_processing = false;
Alles anzeigen
Dann lass dir gleich sagen:
kannst mir das script so fertig machen das ich einfügen kann so wie es ist kann ich nicht nutzen...
Sowas ist nicht lernen.
Und wie ich sagte: Die Ruhrpott Scripte (Schließfach etc) sind NICHT öffentlich
Was er sucht sind spezielle Sachen vom Ruhrpott Life server!
Das Schließfach dort gibt es nicht öffentlich. Deren Multiprozess, soweit ich weiss auch nicht.
Also lerne, mit den vorhandenen Tutorials umzugehen, und arbeite dich in die Materie ein.
Es wird dir NIEMAND eine "hier hast du - bau einfach ein - das ist narrensicher - und keiner kann es dir klauen" Lösung bieten können.
Wir alle haben mal klein angefangen!
Und wenn du das nicht hinkriegst dann solltest du dir überlegen ob es mit einem eigenen Server das richtige ist..
Stimme ich voll und ganz zu.
Ok, gegen das Template kann man an sich ja nichs sagen xD Ich selber hatte auch vor dieses zu nehmen, aber ich glaube ich lasse es
Ist aber schon dreist, Texte 1:1 zu kopieren, und Grafiken ähnlich zu gestallten...
xD
Nach dem auch ich Möglichkeiten gesucht habe, den Farming-Bug zu verhindern, und tutorials wie diese: [Tutorial] Farmbugs fixen
einfach nicht funktionieren, habe ich mir eine andere Methode überlegt, die meiner Meinung nach funktioniert, und auch gerecht ist.
Was macht das Script?
Diese Script hat einen "Zähler" am anfang der Farming Scripte, und wird mit jedem Start des Scripts +1 gezählt.
Am Ende des Scripts wird der Zähler wieder auf 0 gesetzt.
Hält nun ein User seine Farmingtaste gedrückt, oder drückt sie rapide schnell hintereinander, wird jedesmal der Zähler (da er am anfang steht) +1 addiert.
Ist eine fest eingestellt Zahl erreicht, bevor das Script durch ist (also der Zähler am ende auf 0 steht) wird für alle eine Meldung herausgegeben,
das der entsprechende User den Farming Bug versucht hat, auszunutzen.
Anschließend, bekommt er als Strafe ein "Mission End". Da hier nun die zItems, die gerade gesammelt wurden, sehr wahrscheinlich noch nicht gespeichert sind,
kann der User diese neu sammeln gehen.
Strafen können beliebig eingebaut werden!
Hier nun das TUT:
1. Schritt
Öffne die description.ext und füge unter der class NotWhitelisted, eine neue Class hinzu:
Aussehen sollte es dann so:
class CfgDebriefing
{
class NotWhitelisted
{
title = "FAIL!";
subtitle = "Du bist nicht White-Listed!";
description = "Du bist nicht gewhitelistet. Bitte melde dich im Forum! www.tilos-life.de";
pictureBackground = "";
picture = "";
pictureColor[] = {0,0.3,0.6,1};
};
class BugUser
{
title = "FARMING-BUG-USING FAILED!";
subtitle = "Bitte unterlasse das Bugusen beim Farmen!";
description = "BUGUSING KANN ZUM BAN FUEHREN!!";
pictureBackground = "";
picture = "";
pictureColor[] = {0,0.3,0.6,1};
};
class Blacklisted
{
title = "Mission Failed";
subtitle = "You are blacklisted from cops";
description = "You are not allowed to be a cop due to previous actions and the admins have removed you from being a cop.";
pictureBackground = "";
picture = "";
pictureColor[] = {0,0.3,0.6,1};
};
};
Alles anzeigen
2. Schritt
Am Anfang eines jeden Scripts, wo etwas gefarmt wird, (nach Private["......."]; oder halt ganz oben) folgendes einfügen:
if (isNil "speedcheck") then { speedcheck = 0; };
speedcheck = speedcheck+1;
if(speedcheck > 20) exitWith
{
["BugUser",FALSE,TRUE] call BIS_fnc_endMission;
sleep 3;
[[1,format["%1 hat gerade versucht den Farmen-Bug auszunutzen!",name player]],"life_fnc_broadcast",true,false] spawn life_fnc_MP;
};
Alles anzeigen
und ganz am ende der Datei:
speedcheck = 0;