#include #define JOB_NONE 0 #define JOB_PIZZABOY 1 #define JOB_PAPERBOY 2 #define JOB_COURIER 3 static bool:Working[MAX_PLAYERS]; static Job[MAX_PLAYERS]; new JobCheckpoint[MAX_PLAYERS]; hook OnPlayerConnect(playerid) { Working[playerid] = false; Job[playerid] = JOB_NONE; JobCheckpoint[playerid] = INVALID_STREAMER_ID; } hook OnPlayerDisconnect(playerid, reason) { Job_StopWorking(playerid); } hook OnPlayerWounded(playerid) { Job_StopWorking(playerid); } hook OnPlayerEnterJobCPoint(playerid) { if(Working[playerid]) { switch(Job[playerid]) { case JOB_PIZZABOY: PizzaboyEnterCheckpoint(playerid); case JOB_PAPERBOY: PaperboyEnterCheckpoint(playerid); case JOB_COURIER: CourierEnterCheckpoint(playerid); } } return 1; } Job_GetName(jobid) { new string[34]; switch(jobid) { case JOB_NONE: strcat(string, "Unemployed"); case JOB_PIZZABOY: strcat(string, "Pizza boy"); case JOB_PAPERBOY: strcat(string, "Paperboy"); case JOB_COURIER: strcat(string, "Courier"); } return string; } Job_StopWorking(playerid) { if(JobCheckpoint[playerid] != INVALID_STREAMER_ID) { DestroyDynamicCP(JobCheckpoint[playerid]); } Working[playerid] = false; switch(Job[playerid]) { case JOB_PIZZABOY: PizzaboyStopsWorking(playerid); case JOB_PAPERBOY: PaperboyStopsWorking(playerid); case JOB_COURIER: CourierStopsWorking(playerid); } } CMD:job(playerid, params[]) { if(isnull(params)) return SendSyntaxMessage(playerid, "/job (options: start, stop, take, quit)"); if(!strcmp(params, "start", true)) { if(Job[playerid] == JOB_NONE) return SendErrorMessage(playerid, "You don't have a job."); if(Working[playerid]) return SendErrorMessage(playerid, "You are already working."); if(IsPlayerWounded(playerid)) return SendErrorMessage(playerid, "You can't do this while you're wounded."); switch(Job[playerid]) { case JOB_PIZZABOY: PizzaboyStartJob(playerid); case JOB_PAPERBOY: PaperboyStartJob(playerid); case JOB_COURIER: CourierStartJob(playerid); } } else if(!strcmp(params, "stop", true)) { if(Job[playerid] == JOB_NONE) return SendErrorMessage(playerid, "You don't have a job."); if(!Working[playerid]) return SendErrorMessage(playerid, "You are not working."); Job_StopWorking(playerid); SendClientMessage(playerid, 0xffcc80ff, "(Job) You have stopped working."); } else if(!strcmp(params, "take", true)) { if(Job[playerid] != JOB_NONE) return SendErrorMessageF(playerid, "You are already hired as a %s. (Use /job take insetead)", Job_GetName(Job[playerid])); inline _response(pid, dialogid, response, listitem, string:inputtext[]) { #pragma unused pid, dialogid, inputtext if(!response) return 0; Player_SetJob(playerid, listitem + 1, true); va_SendClientMessage(playerid, 0xffcc80ff, "(Job) You've got hired as a %s.", Job_GetName(listitem + 1)); } Dialog_ShowCallback(playerid, using inline _response, DIALOG_STYLE_TABLIST_HEADERS, "Available jobs", "Please choose a job\nPizza boy\nPaperboy\nCourier", "Ok", "Close"); } else if(!strcmp(params, "quit", true)) { if(Job[playerid] == JOB_NONE) return SendErrorMessage(playerid, "You don't have a job."); va_SendClientMessage(playerid, 0xffcc80ff, "(Job) You have quit your job as a %s.", Job_GetName(Job[playerid])); Player_SetJob(playerid, JOB_NONE, true); Job_StopWorking(playerid); } else SendSyntaxMessage(playerid, "/job (options: start, stop, take)"); return 1; } stock IsCheckpointJobCheckpoint(playerid, checkpointid) { if(JobCheckpoint[playerid] == checkpointid) { return true; } return false; } stock IsPlayerWorking(playerid) { return Working[playerid]; } stock SetPlayerWorking(playerid, bool:status) { Working[playerid] = status; if(!status) { Job_StopWorking(playerid); } } stock Player_GetJob(playerid) { return Job[playerid]; } stock Player_SetJob(playerid, jobid, bool:save) { Job[playerid] = jobid; if(save) { new query[62]; mysql_format(MySQL_GetHandle(), query, sizeof(query), "UPDATE characters SET job = %d WHERE id = %d", jobid, Character_GetSQLID(playerid)); mysql_tquery(MySQL_GetHandle(), query); } }