Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Bestatter Job von LeonMrBonnie für Azgeda Reallife
- #define FILTERSCRIPT
- //**************** INCLUDES **********************
- #include <a_samp>
- #include <zcmd>
- #include <zones>
- #include <streamer>
- //************************************************
- //**************** VARIABLEN *********************
- #define HTML_WHITE "{FFFFFF}"
- #define COLOR_CYAN 0x99FFFFAA
- new corpses;
- new BestatterVehicle[6];
- enum JobInfo
- {
- CorpseID,
- State,
- Vehicle,
- Checkpoint,
- Timer,
- OldSkin,
- bool:OnDuty,
- bool:IsBestatting
- }
- new JobEnum[MAX_PLAYERS][JobInfo];
- enum CorpseInfo
- {
- ID,
- Bestatter,
- Playername[MAX_PLAYER_NAME],
- Zone[MAX_ZONE_NAME],
- Float:X,
- Float:Y,
- Float:Z,
- bool:Exists,
- bool:Active
- }
- new CorpseEnum[MAX_PLAYERS][CorpseInfo];
- //************************************************
- //**************** PUBLICS ***********************
- public OnFilterScriptInit()
- {
- print("Bestatter Job geladen!");
- corpses = 0;
- CreateBestatterVehicles();
- return 1;
- }
- public OnPlayerConnect(playerid)
- {
- JobEnum[playerid][OnDuty] = false;
- JobEnum[playerid][IsBestatting] = false;
- JobEnum[playerid][State] = 0;
- JobEnum[playerid][Timer] = -1;
- JobEnum[playerid][CorpseID] = -1;
- JobEnum[playerid][Checkpoint] = -1;
- JobEnum[playerid][Vehicle] = -1;
- JobEnum[playerid][OldSkin] = -1;
- return 1;
- }
- public OnPlayerDisconnect(playerid, reason)
- {
- if(JobEnum[playerid][Vehicle] != -1)
- {
- SetVehicleToRespawn(JobEnum[playerid][Vehicle]);
- CorpseEnum[JobEnum[playerid][CorpseID]][Bestatter] = -1;
- CorpseEnum[JobEnum[playerid][CorpseID]][Active] = true;
- }
- return 1;
- }
- public OnPlayerDeath(playerid, killerid, reason)
- {
- if(JobEnum[playerid][IsBestatting])
- {
- SendInfoMessage(playerid, "Die Tour wurde vorzeitig beendet, weil du gestorben bist.");
- JobEnum[playerid][IsBestatting] = false;
- JobEnum[playerid][OnDuty] = false;
- SetVehicleToRespawn(JobEnum[playerid][Vehicle]);
- JobEnum[playerid][State] = -1;
- JobEnum[playerid][Vehicle] = -1;
- if(IsValidDynamicCP(JobEnum[playerid][Checkpoint])) DestroyDynamicCP(JobEnum[playerid][Checkpoint]);
- JobEnum[playerid][Checkpoint] = -1;
- }
- new Float:x,Float:y,Float:z,zone[28];
- GetPlayerPos(playerid, x,y,z);
- GetPlayer2DZone(playerid, zone, 28);
- corpses++;
- CorpseEnum[corpses][Exists] = true;
- CorpseEnum[corpses][Active] = true;
- CorpseEnum[corpses][Bestatter] = -1;
- format(CorpseEnum[corpses][Zone],28,"%s",zone);
- format(CorpseEnum[corpses][Playername],24,"%s",GetName(playerid));
- CorpseEnum[corpses][ID] = corpses;
- CorpseEnum[corpses][X] = x;
- CorpseEnum[corpses][Y] = y;
- CorpseEnum[corpses][Z] = z;
- new string[128];
- format(string,sizeof(string),"%s ist in %s gestorben. Nimm den Auftrag bei /corpses an.",GetName(playerid),zone);
- for(new i; i<GetPlayerPoolSize()+1; i++)
- {
- if(JobEnum[i][OnDuty])
- {
- SendInfoMessage(i, string);
- }
- }
- return 1;
- }
- public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
- {
- if(dialogid == 12500)
- {
- if(response)
- {
- if(JobEnum[playerid][State] == 2)
- {
- SendInfoMessage(playerid, "Du musst die Leiche nun abholen. Begib dich zum Checkpoint.");
- new corpseid = strval(inputtext);
- JobEnum[playerid][CorpseID] = corpseid;
- JobEnum[playerid][State] = 3;
- JobEnum[playerid][Checkpoint] = CreateDynamicCP(CorpseEnum[corpseid][X], CorpseEnum[corpseid][Y], CorpseEnum[corpseid][Z], 3.0, -1, -1, playerid, 5000);
- }
- else
- {
- SendInfoMessage(playerid, "Du musst nun zuerst zum Friedhof einen Leichenwagen besorgen.");
- new corpseid = strval(inputtext);
- JobEnum[playerid][CorpseID] = corpseid;
- JobEnum[playerid][IsBestatting] = true;
- JobEnum[playerid][State] = 1;
- CorpseEnum[corpseid][Active] = false;
- CorpseEnum[corpseid][Bestatter] = playerid;
- JobEnum[playerid][Checkpoint] = CreateDynamicCP(930.5751,-1114.8217,24.1278, 3.0, -1, -1, playerid, 5000);
- }
- }
- }
- if(dialogid == 12501)
- {
- if(response)
- {
- JobEnum[playerid][State] = 2;
- return cmd_corpses(playerid);
- }
- else
- {
- RemovePlayerFromVehicle(playerid);
- SetVehicleToRespawn(JobEnum[playerid][Vehicle]);
- JobEnum[playerid][Timer] = -1;
- JobEnum[playerid][Vehicle] = -1;
- JobEnum[playerid][OnDuty] = false;
- SetPlayerSkin(playerid, JobEnum[playerid][OldSkin]);
- SendInfoMessage(playerid, "Du bist nun nichtmehr als Bestatter im Dienst.");
- }
- }
- return 0;
- }
- public OnVehicleDeath(vehicleid, killerid)
- {
- for(new i; i<GetPlayerPoolSize()+1; i++)
- {
- if(vehicleid == JobEnum[i][Vehicle])
- {
- CorpseEnum[JobEnum[i][CorpseID]][Bestatter] = -1;
- CorpseEnum[JobEnum[i][CorpseID]][Active] = true;
- JobEnum[i][IsBestatting] = false;
- JobEnum[i][Timer] = -1;
- JobEnum[i][CorpseID] = -1;
- SendInfoMessage(i, "Der Auftrag wurde abgebrochen, weil dein Fahrzeug zerstört wurde.");
- }
- }
- }
- public OnPlayerEnterDynamicCP(playerid, checkpointid)
- {
- if(checkpointid == JobEnum[playerid][Checkpoint])
- {
- PlayerPlaySound(playerid, 1139, 0.0, 0.0, 0.0);
- if(JobEnum[playerid][State] == 1)
- {
- DestroyDynamicCP(JobEnum[playerid][Checkpoint]);
- JobEnum[playerid][State] = 2;
- SendInfoMessage(playerid, "Steig nun in einen Leichenwagen ein.");
- }
- if(JobEnum[playerid][State] == 3)
- {
- if(IsPlayerInAnyVehicle(playerid)) return 1;
- DestroyDynamicCP(JobEnum[playerid][Checkpoint]);
- SetPlayerSpecialAction(playerid, 25);
- new Float:x,Float:y,Float:z;
- GetPlayerPos(playerid,x,y,z);
- SetPlayerAttachedObject(playerid, 0, 19944, 1, -0.0639, 0.5919, 0.0000, -1.0000, 85.6999, 81.8999, 0.5880, 0.6990, 0.6490, 0xFFFFFFFF, 0xFFFFFFFF);
- new Float:x2,Float:y2,Float:z2;
- GetPosBehindVehicle(JobEnum[playerid][Vehicle], x2,y2,z2);
- JobEnum[playerid][Checkpoint] = CreateDynamicCP(x2, y2, z2, 1.5, -1, -1, playerid, 5000);
- JobEnum[playerid][State] = 4;
- }
- else if(JobEnum[playerid][State] == 4)
- {
- SendInfoMessage(playerid, "Du hast die Leiche nun eingeladen. Fahre zurück zum Friedhof.");
- DestroyDynamicCP(JobEnum[playerid][Checkpoint]);
- RemovePlayerAttachedObject(playerid, 0);
- SetPlayerSpecialAction(playerid, 0);
- JobEnum[playerid][Checkpoint] = CreateDynamicCP(940.5775,-1086.8916,24.2962, 3.5, -1, -1, playerid, 5000);
- JobEnum[playerid][State] = 5;
- }
- else if(JobEnum[playerid][State] == 5)
- {
- if(!IsPlayerInVehicle(playerid, JobEnum[playerid][Vehicle])) return SendInfoMessage(playerid, "Du musst dich in deinem Leichenwagen befinden.");
- DestroyDynamicCP(JobEnum[playerid][Checkpoint]);
- new corpseid = JobEnum[playerid][CorpseID];
- CorpseEnum[corpseid][Active] = false;
- CorpseEnum[corpseid][Exists] = false;
- CorpseEnum[corpseid][Bestatter] = -1;
- JobEnum[playerid][IsBestatting] = false;
- JobEnum[playerid][Timer] = -1;
- JobEnum[playerid][CorpseID] = -1;
- JobEnum[playerid][Checkpoint] = -1;
- JobEnum[playerid][State] = 0;
- SendInfoMessage(playerid, "Du hast die Leiche erfolgreich abgeliefert. Deine Tour ist damit beendet.");
- ShowPlayerDialog(playerid, 12501, DIALOG_STYLE_MSGBOX, "Tour beenden","Möchtest du weiterjobben?", "Weiter", "Aufhören");
- }
- }
- return 1;
- }
- public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
- {
- for(new i; i<(sizeof BestatterVehicle); i++)
- {
- if(vehicleid == BestatterVehicle[i] && JobEnum[playerid][State] == 2)
- {
- SendInfoMessage(playerid, "Du musst die Leiche nun abholen. Begib dich zum Checkpoint.");
- new corpseid = JobEnum[playerid][CorpseID];
- JobEnum[playerid][State] = 3;
- JobEnum[playerid][Vehicle] = vehicleid;
- JobEnum[playerid][Checkpoint] = CreateDynamicCP(CorpseEnum[corpseid][X], CorpseEnum[corpseid][Y], CorpseEnum[corpseid][Z], 3.0, -1, -1, playerid, 5000);
- }
- }
- if(JobEnum[playerid][Timer] != -1 && JobEnum[playerid][IsBestatting])
- {
- KillTimer(JobEnum[playerid][Timer]);
- JobEnum[playerid][Timer] = -1;
- }
- return 1;
- }
- public OnPlayerExitVehicle(playerid, vehicleid)
- {
- if(vehicleid == JobEnum[playerid][Vehicle] && JobEnum[playerid][IsBestatting])
- {
- SendInfoMessage(playerid, "Die Tour wird nach 2 Minuten beendet, wenn du dein Fahrzeug nicht betrittst.");
- JobEnum[playerid][Timer] = SetTimerEx("RespawnVehicle", 125000, 0, "d", playerid);
- }
- return 1;
- }
- forward RespawnVehicle(playerid);
- public RespawnVehicle(playerid)
- {
- CorpseEnum[JobEnum[playerid][CorpseID]][Bestatter] = -1;
- CorpseEnum[JobEnum[playerid][CorpseID]][Active] = true;
- JobEnum[playerid][IsBestatting] = false;
- JobEnum[playerid][Timer] = -1;
- JobEnum[playerid][CorpseID] = -1;
- SendInfoMessage(playerid, "Die Tour wurde vorzeitig beendet, weil du dein Fahrzeug verlassen hast.");
- }
- //************************************************
- //**************** BEFEHLE ***********************
- CMD:jobduty(playerid)
- {
- if(JobEnum[playerid][OnDuty])
- {
- if(JobEnum[playerid][IsBestatting]) return SendInfoMessage(playerid, "Du musst zuerst deinen Auftrag beenden. Du kannst diesen mit /cancelcorpse vorzeitig abbrechen.");
- JobEnum[playerid][OnDuty] = false;
- SetPlayerSkin(playerid, JobEnum[playerid][OldSkin]);
- SendInfoMessage(playerid, "Du bist nun nichtmehr als Bestatter im Dienst.");
- }
- else
- {
- JobEnum[playerid][OldSkin] = GetPlayerSkin(playerid);
- SetPlayerSkin(playerid, 68);
- JobEnum[playerid][OnDuty] = true;
- JobEnum[playerid][State] = 0;
- SendInfoMessage(playerid, "Du bist nun als Bestatter im Dienst.");
- }
- return 1;
- }
- CMD:corpses(playerid)
- {
- if(!JobEnum[playerid][OnDuty]) return SendInfoMessage(playerid, "Du bist nicht als Bestatter im Dienst.");
- if(JobEnum[playerid][IsBestatting]) return SendInfoMessage(playerid, "Du hast bereits einen Auftrag angenommen. Du kannst diesen mit /cancelcorpse beenden.");
- new dialogstr[2048],addstr[128],amount;
- dialogstr = "ID\tSpieler\tOrt\n";
- for(new i; i<corpses+1; i++)
- {
- if(CorpseEnum[i][Active] && CorpseEnum[i][Exists])
- {
- format(addstr, sizeof(addstr), "%d\t%s\t%s\n",CorpseEnum[i][ID],CorpseEnum[i][Playername],CorpseEnum[i][Zone]);
- strcat(dialogstr, addstr);
- amount++;
- }
- }
- if(amount == 0) return SendInfoMessage(playerid, "Es sind momentan keine Leichen verfügbar.");
- ShowPlayerDialog(playerid, 12500, DIALOG_STYLE_TABLIST_HEADERS, "Verfügbare Leichen", dialogstr, "Annehmen", "Schliessen");
- return 1;
- }
- CMD:cancelcorpse(playerid)
- {
- if(!JobEnum[playerid][OnDuty]) return SendInfoMessage(playerid, "Du bist nicht als Bestatter im Dienst.");
- if(!JobEnum[playerid][IsBestatting]) return SendInfoMessage(playerid, "Du hast keinen Auftrag angenommen. Du kannst einen bei /corpses annehmen.");
- new corpseid = JobEnum[playerid][CorpseID];
- CorpseEnum[corpseid][Bestatter] = -1;
- CorpseEnum[corpseid][Active] = true;
- JobEnum[playerid][IsBestatting] = false;
- JobEnum[playerid][CorpseID] = -1;
- SendInfoMessage(playerid, "Du hast deinen Auftrag vorzeitig abgebrochen.");
- return 1;
- }
- //********************************************
- //*************** FUNKTIONEN *****************
- GetName(playerid)
- {
- new pnameid[24];
- GetPlayerName(playerid,pnameid,sizeof(pnameid));
- return pnameid;
- }
- SendInfoMessage(playerid, text[])
- {
- new message[100];
- format(message,sizeof(message),"[BESTATTER]: "HTML_WHITE"%s",text);
- SendClientMessage(playerid, COLOR_CYAN, message);
- return 1;
- }
- CreateBestatterVehicles()
- {
- BestatterVehicle[0] = CreateVehicle(442, 922.0735, -1123.8618, 23.7318, 0.3634, 0, 0, 125); //Stretch
- BestatterVehicle[1] = CreateVehicle(442, 929.1399, -1123.8614, 23.6785, 359.4256, 0, 0, 125); //Stretch
- BestatterVehicle[2] = CreateVehicle(442, 935.7604, -1123.8312, 23.7600, 0.1883, 0, 0, 125); //Stretch
- BestatterVehicle[3] = CreateVehicle(442, 925.6629, -1123.8359, 23.7680, 359.9471, 0, 0, 125); //Stretch
- BestatterVehicle[4] = CreateVehicle(442, 932.3648, -1123.8609, 23.7647, 359.7719, 0, 0, 125); //Stretch
- BestatterVehicle[5] = CreateVehicle(442, 939.6359, -1123.8365, 23.7702, 359.7358, 0, 0, 125); //Stretch
- }
- stock GetPosBehindVehicle(vehicleid, &Float:x, &Float:y, &Float:z, Float:offset=0.5) //Credits go to MP2
- {
- new Float:vehicleSize[3], Float:vehiclePos[3];
- GetVehiclePos(vehicleid, vehiclePos[0], vehiclePos[1], vehiclePos[2]);
- GetVehicleModelInfo(GetVehicleModel(vehicleid), VEHICLE_MODEL_INFO_SIZE, vehicleSize[0], vehicleSize[1], vehicleSize[2]);
- GetXYBehindVehicle(vehicleid, vehiclePos[0], vehiclePos[1], (vehicleSize[1]/2)+offset);
- x = vehiclePos[0];
- y = vehiclePos[1];
- z = vehiclePos[2];
- return 1;
- }
- GetXYBehindVehicle(vehicleid, &Float:q, &Float:w, Float:distance)//Credits go to MP2
- {
- new Float:a;
- GetVehiclePos(vehicleid, q, w, a);
- GetVehicleZAngle(vehicleid, a);
- q += (distance * -floatsin(-a, degrees));
- w += (distance * -floatcos(-a, degrees));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement