Guten morgen werte Community,
ich ziemlich neu hier bei euch, hoffe aber das ihr mir weiterhelfen könnt. Ich habe jetzt längere Zeit nichts mehr mit Arma zu tun gehabt, habe aber vor ein paar Wochen wieder angefangen Unterstützung für den Server eines Freundes zu leisten. Bisher hat auch alles gut geklappt, aber gerade stosse ich leider an ein Problem, welches ich selbst nicht sehe. Vielleicht bin ich zu eingerostet oder ich versuche es mal wieder zu kompliziert.
Ich habe einen Taxi-Job implementiert, für welchen man sich an einem Terminal registriert und Geld bekommt, solange man ein bestimmtes Fahrzeug fährt. Solange es einen angemeldeten Taxifahrer gibt können alle anderen Spieler über einen Button ein Taxi rufen und es wird ein Marker auf der Map erstellt. Dieser Marker wird dann nur den Taxifahrern angezeigt. Mein Problem ist jetzt, dass ich den Marker gerne löschen würde, sobald derjenige, der das Taxi gerufen hat in ein Fahrzeug einsteigt.
Hier mal die wichtigsten Dateien:
Taxi rufen:
Spoiler anzeigen
private["_taxiOnline"];
if(player getVariable "taxi_driver") exitwith {["Du bist selber Taxifahrer!", false] spawn domsg;};
if(checked_taxi) exitWith {["Du kannst nur alle 5 Minuten ein Taxi rufen.", false] spawn domsg;};
_taxiOnline = {_x != player && {side _x == civilian} && {alive _x} && {_x getVariable "taxi_driver"}} count playableUnits > 0; //Check if medics (indep) are in the room.
if(!_taxiOnline) exitWith {["Es ist kein Taxi verfügbar.", false] spawn domsg;};
[player, name player] remoteExec ["life_fnc_taxiRequest",civilian];
["Du hast ein Taxi gerufen!", false] spawn domsg;
[] spawn
{
checked_taxi = true;
sleep (5 * 60);
checked_taxi = false;
};
Alles anzeigen
Weiterleitung zu den Taxi-Fahrern:
Spoiler anzeigen
private["_caller","_callerName","_vehicle"];
if((playerside == civilian) && (player getVariable "taxi_driver")) then {
_caller = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param;
_callerName = [_this,1,"Unknown Player",[""]] call BIS_fnc_param;
if(isNull _caller) exitWith {}; //Bad data
if(typeOf(vehicle player) != "cl3_suv_taxi") exitwith {["Du hast einen Funkspruch verpasst!"] spawn domsg;};
_alreadyInList= false;
{
if(_x select 0 == _caller)then{
_alreadyInList = true;
};
}foreach life_taxiMarker;
if(_alreadyInList) exitWith {};
life_taxiMarker set [count life_taxiMarker,[_caller,_callerName]];
playSound "ringing";
["Jemand hat ein Taxi gerufen! Schau auf deine Karte."] spawn domsg;
_vehicle = vehicle player;
waitUntil{count crew _vehicle > 1};
{
sleep 1;
passenger = crew _vehicle;
life_taxiMarker deleteAt (life_taxiMarker find _x);
} foreach passenger;
};
Alles anzeigen
Marker aus dem Array werden angezeigt:
Spoiler anzeigen
private["_markers"];
_markers = [];
sleep 0.25;
if(visibleMap && (player getVariable "taxi_driver")) then {
{
_marker = createMarkerLocal [format["%1_taxi_marker",_x select 1],getPos (_x select 0)];
_marker setMarkerColorLocal "ColorRed";
_marker setMarkerTypeLocal "plp_mark_civ_taxi";
_marker setMarkerTextLocal format["%1 ruft ein Taxi",_x select 1];
_markers pushBack _marker;
} foreach life_taxiMarker;
waitUntil {!visibleMap};
{deleteMarkerLocal _x;} foreach _markers;
};
Alles anzeigen
Wie gesagt, mein Problem besteht jetzt darin, dass die Marker nicht gelöscht werden. Habe jetzt auch schon einige Wege ausprobiert, aber ich komm einfach nicht auf die Lösung. Vielleicht kann mir ja jemand einen Denkanstoss geben.
MfG
Nexarion