Ich habe deinen Code genommen, welchen du gepostet hast und habe ihn auf deine Anfrage entsprechend umgeschrieben.
Dann hattest du vorher auch schon einen Fehler drinne...
Schau dir bitte einfach die Unterschiede in dem Code an und probier es selber zu lösen.
Beiträge von Basti0208
-
-
Abrufen:
Speichern (mit der von mir genannten Methode bekommst du im POST einen Array zurück, darauf basiert dieser Code):
-
Also ich hab das so in die fn_KeyHandler.sqf eingetragen und ich sitzte nich mal im auto und kann die sirene vom medic anschalten, und in die 2 fn_sirenLights.sqf oder fn_copSiren.sqf sind keine Abfragen zur Spielerseite. ich habe den code von Basti0208 benutzt.
Code
Alles anzeigen//L Key? case 38: { //If cop run checks for turning lights on. if (_shift && playerSide in [west,independent,civilian]) then { if (!(isNull objectParent player) && (typeOf vehicle player) in ["C_Offroad_01_F","B_MRAP_01_F","C_SUV_01_F","C_Hatchback_01_sport_F","B_Heli_Light_01_F","B_Heli_Transport_01_F"]) then { if (!isNil {vehicle player getVariable "lights"}) then { if (playerSide isEqualTo west) then { [vehicle player] call life_fnc_sirenLights; } else { [vehicle player] call life_fnc_medicSirenLights; }; _handled = true; }; }; }; if (!_alt && !_ctrlKey) then { [] call life_fnc_radar; }; }; //Y Player Menu case 21: { if (!_alt && !_ctrlKey && !dialog && !(player getVariable ["restrained",false]) && {!life_action_inUse}) then { [] call life_fnc_p_openMenu; }; }; //F Key case 33: { if (playerSide in [west,independent,civilian] && {vehicle player != player} && {!life_siren_active} && {((driver vehicle player) == player)}) then { [] spawn { life_siren_active = true; sleep 4.7; life_siren_active = false; }; _veh = vehicle player; if (isNil {_veh getVariable "siren"}) then {_veh setVariable ["siren",false,true];}; if ((_veh getVariable "siren")) then { titleText [localize "STR_MISC_SirensOFF","PLAIN"]; _veh setVariable ["siren",false,true]; } else { titleText [localize "STR_MISC_SirensON","PLAIN"]; _veh setVariable ["siren",true,true]; if (playerSide isEqualTo west) then { [_veh] remoteExec ["life_fnc_copSiren",RCLIENT]; } else { [_veh] remoteExec ["life_fnc_medicSiren",RCLIENT]; }; }; }; };
denn hab ich das mal so eingetragen und und ich sitzte im cop auto mit medic sirene an und kann nicht das blaulicht einschalten, irgendwas mach ich verkehrt.
Das ist nicht der Code, welchen ich gepostet habe.
-
Ich wäre da erstmal generall anders rangegangen.
Ich hätte mir den Array in folgenderweise in der DB gespeichert: '["bsp1","bsp2","bsp3"]'
Somit könntest du dann via json_encode folgenden Code benutzen, um deinen Array zu bekommen:
Um nun im POST wieder einen Array zu erhalten, müsstest du den Namen des Input-Feldes auf folgenden ändern: name="dein_name[]"
Dadurch wird das Feld und alle anderen Felder, welche so benannt wurden, automatisch in ein Array umgewandelt. -
weißt du wie ich es hin bekomme das alle fraktionen das blaulicht und die sirene an machen können?
Ja weiß ich, aber ich muss dir ehrlich sagen, dass ich es schon fast frech finde, dass du nach etwas "so leichtem" fragst. Ich kann nur das sagen, was ich bereits hier im Forum erwähnt habe: Setz dich mit den Skripten auseinander, probier aus und schau Befehle im BI-Wiki nach, die dir nichts sagen, anders lernt man es nicht.
Hier jedoch die überarbeitete Version, wobei du schauen musst, ob in der fn_sirenLights.sqf oder fn_copSiren.sqf noch Abfragen zur Spielerseite drinnen sind.:Code
Alles anzeigen//L Key? case 38: { //If cop run checks for turning lights on. if (!(isNull objectParent player) && (typeOf vehicle player) in ["C_Offroad_01_F","B_MRAP_01_F","C_SUV_01_F","C_Hatchback_01_sport_F","B_Heli_Light_01_F","B_Heli_Transport_01_F"]) then { if (!isNil {vehicle player getVariable "lights"}) then { if (playerSide in [west, civilian]) then { [vehicle player] call life_fnc_sirenLights; } else { [vehicle player] call life_fnc_medicSirenLights; }; _handled = true; }; }; if (!_alt && !_ctrlKey) then { [] call life_fnc_radar; }; }; //Y Player Menu case 21: { if (!_alt && !_ctrlKey && !dialog && !(player getVariable ["restrained",false]) && {!life_action_inUse}) then { [] call life_fnc_p_openMenu; }; }; //F Key case 33: { [] spawn { life_siren_active = true; sleep 4.7; life_siren_active = false; }; _veh = vehicle player; if (isNil {_veh getVariable "siren"}) then {_veh setVariable ["siren",false,true];}; if ((_veh getVariable "siren")) then { titleText [localize "STR_MISC_SirensOFF","PLAIN"]; _veh setVariable ["siren",false,true]; } else { titleText [localize "STR_MISC_SirensON","PLAIN"]; _veh setVariable ["siren",true,true]; if (playerSide in [west, civilian]) then { [_veh] remoteExec ["life_fnc_copSiren",RCLIENT]; } else { [_veh] remoteExec ["life_fnc_medicSiren",RCLIENT]; }; }; };
Nochmal zu deinem Sound-Problem:Ich habe mal eben was geschrieben, was automatisch die Distanz und den Pitch aus der Konfig lädt, insofern du die Parameter mit dem Funktionsaufruf nicht überschreibst.
Sollte an sich funktionieren, falls doch nicht, dann kannst du ja nochmal was schreiben.
Durch diese Anpassung kannst du den bestehenden Code beibehalten und einfach die Konfig abändern.Code
Alles anzeigen/* File: fn_say3D.sqf Author: Basti0208 */ // Eigentliche Parameter in Variablen speichern params [ ["_object", objNull, [objNull]], ["_sound", "", [""]], ["_distance", -1, [0]], ["_pitch", -1, [0]] ]; if (isNull _object || {_sound isEqualTo ""}) exitWith {}; // Config-Einträge in Variablen speichern getArray(missionConfigFile >> "CfgSounds" >> _sound >> "sound") params [ "", "", ["_configPitch", 1, [0]], ["_configDistance", 100, [0]] ]; if (_distance isEqualTo -1) then { _distance = _configDistance; }; if (_pitch isEqualTo -1) then { _pitch = _configPitch; }; _object say3D [_sound, _distance, _pitch];
-
Also ich habe das einmal bei Auto aufbrechen versucht aber der Cop hört nix, auch nicht mal wenn er direkt davor steht
pasted-from-clipboard.png
Du musst das mit remoteExecCall verwenden, damit den Sound alle Clients hören. -
Okay also muss ich hier zum beispiel von Alt auf Neu machen?
Code[_shop,"robberyalarm"] remoteExec ["life_fnc_say3D",0]; // Alt [_shop,["robberyalarm",200,1] remoteExec ["life_fnc_say3D",0]; // Neu [_curTarget,"CarAlarm"] remoteExec ["life_fnc_say3D",RANY]; // Alt [_curTarget,["CarAlarm",100,1] remoteExec ["life_fnc_say3D",RANY]; // Neu
Und denn hab ich noch eine Frage was muss ich einstellen damit alle Fraktionen das Blaulicht und die Sirene anmachen können?
Wenn in deiner life_fnc_say3D die Parameter definiert sind, dann kannst du das fast so machen, ja.
Schau dir aber nochmal den Aufruf genau an:
[_shop,["robberyalarm",200,1] remoteExec ["life_fnc_say3D",0];
(Die blaue Klammer muss weg, wollte es nur versuchen, zu visualisieren ^^)Du siehst, dass die erste Klammer mit einem richtigen Syntax-Highlight eine andere Farbe hat.
-
Ich weiß zwar nicht welche altis life Version du hast aber auf jeden Fall eine alte
Das kann sehr gut sein
Ändert ja trotzdem nichts an der Lösung. Die Lösung bewirkt, dass bereits gesetztes Rating mit abgezogen wird.
-
Der Server-Log hilft bei Skripten, die auf dem Client ausgeführt werden nichts
Am besten noch den Client Log anhängen
Im Server-Log sind mir nur Fehler von A3F und ASN aufgefallen. -
Ich bin der Meinung, dass in Altis Life ein hohes Rating von Anfang an gesetzt wird.
Dieses musst du mit einem kleinen Trick auf unter -2000 bringen, damit der Spieler als Gegner angesehen wird.(Ist jedoch ungetestet und muss überprüft werden)
-
Du hättest es auch mit local und foreach machen können.
Nein hätte man nicht. Du hättest es auf jedem Client einzeln ausführen müssen via remoteExecCall.
Ein foreach-Loop geht nur die Items im Array durch, es wird trotzdem lokal bei dir ausgeführt.Hier eine überarbeitete Version:
C
Alles anzeigen/* Author: ? edited by Joe Barbaro Description: Tankstellenraub Script */ #include "..\..\script_macros.hpp" /*--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ private _shop = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param; //The object that has the action attached to it is _this. ,0, is the index of object, ObjNull is the default should there be nothing in the parameter or it's broken private _robber = [_this,1,ObjNull,[ObjNull]] call BIS_fnc_param; //Can you guess? Alright, it's the player, or the "caller". The object is 0, the person activating the object is 1 private _action = [_this,2] call BIS_fnc_param;//Action name private _kassa = 10000 + round(random 10000); //The amount the shop has to rob, you could make this a parameter of the call (community.bistudio.com/wiki/addAction). Give it a try and post below private _cops = (west countSide playableUnits); /*--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ if(side _robber != civilian) exitWith { hintSilent "Ich melde dich lieber deinem Vorgesetzten" }; if(_robber distance _shop > 5) exitWith { hintSilent "Was willst du denn den aus nem Kilometer bedrohen?" }; if (vehicle player != _robber) exitWith { hintSilent "Was solln das werden Drive-by?" }; if !(alive _robber) exitWith {}; if (currentWeapon _robber == "") exitWith { hintSilent "Was willst du pisser von mir hau ab!" }; if (_kassa == 0) exitWith {hintSilent "Kein Geld keine Beute!"}; if(_cops < 1) exitWith {hintSilent "Ohne Polizei macht so ein Überfall doch gar keinen Spaß :D";}; /*--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ _rip = true; _shop removeAction _action; [_shop,"AmovPercMstpSsurWnonDnon",true] remoteExecCall ["life_fnc_animSync",RCLIENT]; _chance = random(100); if(_chance >= 1) then {[1,format["ALARM! - Tankstelle: %1 wird ausgeraubt!", _shop]] remoteExec ["life_fnc_broadcast",west]; }; /*--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ disableSerialization; 250 cutRsc ["life_progress","PLAIN"]; _ui = uiNameSpace getVariable "life_progress"; _progress = _ui displayCtrl 38201; _pgText = _ui displayCtrl 38202; _pgText ctrlSetText format["Überfall läuft... Behalt den Kassierer im Griff (%1%1)...","%"]; _progress progressSetPosition 0.01; _cP = 0.01; if(_rip) then { _Pos = position player; // by ehno: get player pos _marker = createMarker ["TankeMarker", _Pos]; //by ehno: Place a Maker on the map "TankeMarker" setMarkerColor "ColorRed"; "TankeMarker" setMarkerText "!LAUFENDER ÜBERFALL!"; "TankeMarker" setMarkerType "mil_warning"; while {true} do { uiSleep 0.85; _cP = _cP + 0.01; _progress progressSetPosition _cP; _pgText ctrlSetText format["Überfall läuft... Behalt den Kassierer im Griff (%1%2)...",round(_cP * 100),"%"]; if(_cP >= 1) exitWith {}; if(_robber distance _shop > 5) exitWith { }; if!(alive _robber) exitWith {}; /*--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ }; if(_robber getVariable "restrained") exitWith {_rip = false; hint "Tja festgenomen scheiße gelaufen..."; 250 cutText ["","PLAIN"];}; //Player got arrested, or restrained by another player! if(life_istazed) exitWith {_rip = false; hint "Du wurdest getazert RIP!"; 250 cutText ["","PLAIN"];}; //Player was tazed if!(alive _robber) exitWith {_rip = false; 250 cutText ["","PLAIN"];}; if(_robber distance _shop > 5) exitWith { deleteMarker "TankeMarker"; [_shop,"",true] remoteExecCall ["life_fnc_animSync",RCLIENT]; hintSilent "Du hast den Kassierer nicht im Auge gehabt"; 250 cutText ["","PLAIN"]; _rip = false; }; 250 cutText ["","PLAIN"]; titleText[format["Du hast %1$, geklaut! Hau ab bevor die Cops kommen!",[_kassa] call life_fnc_numberText],"PLAIN"]; [_shop,"robberyalarm"] remoteExec ["life_fnc_say3D",0]; deleteMarker "TankeMarker"; // by ehno delete maker life_cash = life_cash + _kassa; _rip = false; life_use_atm = false; uiSleep (30 + random(180)); life_use_atm = true; if!(alive _robber) exitWith {}; [getPlayerUID _robber,name _robber,"211"] remoteExec ["life_fnc_wantedAdd",2]; }; uiSleep 300; _action = _shop addAction["Tankstelle ausrauben",life_fnc_robShops]; [_shop,"",true] remoteExecCall ["life_fnc_animSync",RCLIENT];
Ich habe den foreach-Loop entfernt und die Marker-Erstellung aus dem while-Loop entfernt, da dies nicht nötig ist und nur Performance frisst.
-
Ich weiß ja nicht, ob du mal einen Blick in den Client-Log gewagt hast, aber ich vermute einfach mal, dass du dir den Log nichtmals angeschaut hast.
Hier ist direkt der Fehler:Code16:36:40 Error Nicht definierte Variable in Ausdruck: _kassa 16:36:40 File core\actions\fn_robShops.sqf [life_fnc_robShops]..., line 16
Die Variable ist nicht definiert.
Noch ein kleiner Tipp, wenn du wirklich in das Skripten einsteigen willst und selbständig werden willst: Beschäftige dich mit den Fehlern, setz dich intensiv auseinander und schau wirklich genau nach.
Edit: Hab im selben Moment wie Joe Barbaro meinen beitrag abgeschickt. Lösche ihn aufgrund meines Hinweises jetzt mal nicht. -
Ich habe so das Gefühl, dass der RPT-Log nicht zu deinem Skript passt.
Er meckert wegen einem Semikolon und davor wird eine Funktion aufgerufen, welche gar nicht in dem Skript enthalten ist, das du gepostet hast. -
Ist im Prinzip genau das Gleiche, wie Strider es schon beschrieben hat...
Sollte man FETCH_CONST benutzen, dann muss man daran denken, die script_macros.hpp zu includen.
Beispielsweise so:
#include "script_macros.hpp"
Wobei du dabei auch den Pfad anpassen musst. -
Extension not listed in allowedPreprocessFileExtensions
Ich würde an deiner Stelle einfach mal danach googlen
Wenn schon ein Fehler da steht, dann einfach mal die Mühe machen -
-
Hmm.. das sollte so aber nicht sein
Ich probier mal nen Video davon fertig zu machen. (Angemerkt: Das was gefixt werden soll ist wirklich nur dieser kurze screen beim Springen der kurz auftaucht und wieder weg is)
Einmal mit den Änderungen: https://gph.is/g/Z2p2gem *Link zu einem GIF von giphy.com
Einmal ohne die Änderungen (Normales Tanoa Life 5.0): https://gph.is/g/4ARWg8Q *Link zu einem GIF von giphy.comIch habe deine Änderungen implementiert und bei mir hatte es keine Auswirkung auf den Bugscreen (ich meine auch denselben).
Wird das Skript nicht schon so global dauerhaft ausgeführt, wenn jemand springt? Da juckt dieser eine remoteExec auch nicht mehr.
Zudem werden sowieso schon jeder scheiß global ausgeführt.Stell es dir so vor: Ein Spieler springt -> 50 Clients führen das Script aus (jumpFnc) -> Bei 50 Clients wird ein erneutes remoteExec ausgelöst (switchMove) -> Bei jedem Client kommt 50 mal das remoteExec an.
Zumindest stelle ich es mir so vor, wenn ich da falsch liege, dann klärt mich gerne auf.Zudem werden sowieso schon jeder scheiß global ausgeführt.
Das stimmt so nicht. Viele Dinge werden über remoteExec ausgeführt, aber nicht in so einer Art und Weise.
Ich denke, dass die Threads aber immer mehr Offtopic werden, also lasse ich das Kommentieren hiermit einfach.
Wer das Tut verwenden möchte, kann dies gerne tun, ich rate jedoch aus Gründen der Performance davon ab.
Edit: Nach einem kurzen Test kann ich sagen, wodurch der Bug in der Kamera verursacht wird. Bei einem call tritt der Fehler nicht auf. Bei einem spawn tritt der Fehler auf. -
Wenn du das nicht verstehst würde ich dir empfehlen es doch einfach zu testen xD
Ich habe es selber getestet und ich hatte immernoch eine verbuggte Kamera (insofern du das meinst, was ich gesehen habe).
Arma 3 nie sehr Performant, jetzt alles auf die Goldwage zu legen
erscheint mir ein wenig übertrieben, ich denke nicht das das große Performance Probleme bringt xD
Man muss es ja aber nicht noch schlimmer machen
Ich verstehe nicht, wieso das weniger "buggen" sollte, du führst die Animation einfach öfter aus und verursachst damit nur noch mehr Netzwerktraffic
Das ist mir auch noch eine Frage, da du im Prinzip beim Spieler dasselbe machst. Wenn du remoteExec benutzt, dann sollte sich eher etwas bei den anderen Spielern ändern.
-
Moin,
also an sich ein gutes Tutorial, jedoch frage ich mich, weshalb die jumpFnc global executed wird und dann nochmal die Animation in der bereits globalen Funktion nochmals auf allen Spielern executed wird.
Hört sich eher nach Network Laggs an.
Es kann natürlich sein, dass ich gerade absolut einen Denkfehler habe, aber nehmen wir an, dass wir 50 Spieler auf dem Server haben: Ein Spieler springt, bei 50 Spielern wird die jumpFnc ausgeführt. Dann wird nochmals 50 mal das switchMove auf jedem Spieler ausgeführt. -
Hat nichts mit DB zu tun, sondern mit deiner Query. Du gibst 15 Spalten an, gibst jedoch nur 13 Werte an. Jede Spalte muss ein Wert zugewiesen sein. Sollte die Spalte in der DB bereits einen Default-Wert haben, dann brauchst du die Spalte nicht einfügen.