Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Code by Theory (aka Skyrise) */
- #include <a_samp>
- #include <zcmd>
- #include <a_mysql>
- #include <streamer>
- #include <sscanf2>
- #include <foreach>
- /* Defines - Theory */
- #define fScript "Theory's Bus System"
- #define fVersion "v0.4"
- // [uL]Pottus suggestion.
- #define isDriver(%0) sPlayerInfo[%0][sDriver]
- /***** REQUIRED *******/
- #define SQL_SERVER ""
- #define SQL_USER ""
- #define SQL_DATABASE ""
- #define SQL_PASSWORD ""
- /**********************/
- #define MAX_STRING (1024)
- #define MAX_POINTS (20) /* Can be adjusted */
- /* Forwards */
- forward public bForward(bus);
- forward public bEForward();
- forward public Bus_LoadStops();
- forward public getPoints();
- forward public Load_Driver(playerid);
- forward public getDriver(playerid);
- forward public SaveDriver(playerid);
- /* Enumerators/Other - Theory */
- enum sInfo {
- sDriver,
- bAdmin
- }
- new sPlayerInfo[MAX_PLAYERS][sInfo];
- enum bInfo {
- bid,
- Float:bX,
- Float:bY,
- Float:bZ,
- bTaken,
- bDisabled
- }
- new BusInfo[MAX_POINTS][bInfo];
- new SQLHandle;
- new onCall[MAX_PLAYERS char];
- new hasCall[MAX_PLAYERS char];
- new bDuty[MAX_PLAYERS char];
- /* Public Methods */
- public OnFilterScriptInit()
- {
- SQLHandle = mysql_connect(SQL_SERVER, SQL_USER, SQL_DATABASE, SQL_PASSWORD);
- new ping = mysql_ping(SQLHandle);
- //if ping != -1 *then
- printf( (ping != -1) ? ("* Connection to "#SQL_SERVER" successful with %d ping") : ("* Connection to "#SQL_SERVER" has failed."),ping);
- /*else
- printf("* Connection to "#SQL_SERVER" has failed.");*/
- Bus_LoadStops();
- print("* Loading Stops...");
- return 1;
- }
- public OnFilterScriptExit()
- {
- return 1;
- }
- public OnPlayerConnect(playerid)
- {
- SendClientMessage(playerid, -1, "This server is using "#fScript", "#fVersion".");
- hasCall{playerid} = 0;
- onCall{playerid} = 0;
- bDuty{playerid} = 0;
- return 1;
- }
- public OnPlayerDisconnect(playerid, reason)
- {
- SaveDriver(playerid);
- return 1;
- }
- public OnPlayerSpawn(playerid)
- {
- Load_Driver(playerid);
- return 1;
- }
- public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
- {
- return 1;
- }
- public OnPlayerExitVehicle(playerid, vehicleid)
- {
- return 1;
- }
- public OnPlayerEnterCheckpoint(playerid)
- {
- if(isDriver(playerid)) {
- DisablePlayerCheckpoint(playerid);
- SCME(playerid, -1, "You have arrived.");
- }
- return 1;
- }
- public OnPlayerLeaveCheckpoint(playerid)
- {
- return 1;
- }
- public OnPlayerUpdate(playerid)
- {
- return 1;
- }
- public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
- {
- return 1;
- }
- /* Commands - Theory */
- CMD:ami(playerid, params[])
- {
- SCME(playerid, -1, (isDriver(playerid)) ? ("You are an authorized bus driver.") : ("You are not a bus driver!") );
- return 1;
- }
- CMD:bduty(playerid, params[])
- {
- if isDriver(playerid) *then
- SCME(playerid, -1, (bDuty{playerid}) ? ("You have gone off duty as a bus driver!") : ("You have gone on duty as a bus driver!") ), setPlayerDuty(playerid, (bDuty{playerid}) ? 0 : 1);
- else
- SCME(playerid, -1, "You are not a bus driver!");
- return 1;
- }
- CMD:bcall(playerid, params[])
- {
- for(new i; i < MAX_POINTS; i++) {
- if(IsPlayerInRangeOfPoint(playerid, 10.0, BusInfo[i][bX], BusInfo[i][bY], BusInfo[i][bZ]) && BusInfo[i][bDisabled] == 0) {
- bCall(playerid); hasCall{playerid} = 1;
- SCME(playerid, -1, "You have called the bus, please wait.");
- return 1;
- }
- else {
- return SCME(playerid, -1, "You are not near a bus point!");
- }
- }
- return 1;
- }
- CMD:bcancel(playerid, params[])
- {
- if isDriver(playerid) *then {
- onCall{playerid} = 0;
- foreach(Player, i) {
- SCME(i, -1, "** %s is no longer on duty as a bus driver.",gName(playerid));
- }
- DisablePlayerCheckpoint(playerid);
- }
- else {
- hasCall{playerid} = 0;
- SCME(playerid, -1, "You are no longer requesting a bus.");
- foreach(Player, i) {
- if isDriver(i) *then {
- SCME(playerid, -1, "** %s is no longer requesting a bus. (/resetmarker if you responded to their call.)",gName(playerid));
- }
- }
- }
- return 1;
- }
- CMD:bnear(playerid, params[])
- {
- new id[MAX_POINTS],r;
- for(new i; i < MAX_POINTS; i++) {
- if IsPlayerInRangeOfPoint(playerid, 20.0, BusInfo[i][bX], BusInfo[i][bY], BusInfo[i][bZ]) *then {
- r++;
- SCME(playerid, -1, "Point ID: %d",id[i]);
- }
- }
- SCME(playerid, -1, "You are near %d points with a range of 20.0.", r);
- }
- CMD:givebmod(playerid, params[])
- {
- new giveplayerid, number;
- if IsPlayerAdmin(playerid) *then {
- if(sscanf(params,"ud",giveplayerid,number)) return SCME(playerid, -1, "Usage: /givebmod [player] [0 or 1]");
- if(number > 1 || number < 0) return SCME(playerid, -1, "Usage: /givebmod [player] [0 or 1]");
- sPlayerInfo[giveplayerid][bAdmin] = number;
- }
- else {
- SCME(playerid, -1, "You are not authorized to use this command.");
- }
- return 1;
- }
- CMD:makedriver(playerid, params[])
- {
- new giveplayerid, var;
- if IsPlayerAdmin(playerid) *then {
- if sscanf(params,"ud",giveplayerid,var) *then return SCME(playerid, -1, "Usage: /makedriver [player] [0 or 1]");
- if var > 1 || var < 0 *then return SCME(playerid, -1, "Usage: /makedriver [player] [0 or 1]");
- sPlayerInfo[giveplayerid][sDriver] = var;
- }
- else {
- SCME(playerid, -1, "You are not authorized to use this command.");
- }
- return 1;
- }
- CMD:bmods(playerid, params[])
- {
- foreach(Player, bmod) {
- if sPlayerInfo[bmod][bAdmin] == 1 *then {
- SCME(playerid, -1, "%s is assigned as a bMod.",gName(bmod));
- }
- }
- return 1;
- }
- CMD:acceptcall(playerid, params[])
- {
- new giveplayerid;
- new Float:X, Float:Y, Float:Z;
- if isDriver(playerid) *then {
- if onCall{playerid} == 1 *then
- return SCME(playerid, -1, "Perhaps you should pick up the other player first?");
- if !bDuty{playerid} *then
- return SCME(playerid, -1, "You should go on duty first! (/bduty)");
- if sscanf(params, "u",giveplayerid) *then
- return SCME(playerid,-1, "Usage: /acceptcall [player]");
- if hasCall{giveplayerid} == 1 *then {
- GetPlayerPos(giveplayerid, X, Y, Z);
- SetPlayerCheckpoint(playerid, X, Y, Z, 5);
- SCME(playerid, -1, "You have accepted %s's call.",gName(giveplayerid));
- SCME(playerid, -1, "%s has accepted your call for a bus.",gName(playerid));
- foreach(Player, i) {
- if(isDriver(i)) {
- SCME(i, -1, "** %s has accepted the bus call from %s.",gName(playerid),gName(giveplayerid));
- }
- }
- }
- else
- return SCME(playerid, -1, "That person has not called for a bus!");
- }
- else
- return SCME(playerid, -1, "You are not a bus driver.");
- return 1;
- }
- CMD:resetmarker(playerid, params[])
- {
- DisablePlayerCheckpoint(playerid), SCME(playerid, -1, "Checkpoint reset.");
- return 1;
- }
- CMD:br(playerid, params[]) { return cmd_bradio(playerid, params); }
- CMD:bradio(playerid, params[])
- {
- if isDriver(playerid) *then {
- if(isnull(params)) return SCME(playerid, -1, "Usage: /br(adio) [message]");
- foreach(Player, i) {
- if(isDriver(i)) {
- SCME(i, 0x4682B4FF, params);
- }
- }
- }
- else {
- return SCME(playerid, -1, "You need to be a bus driver to use this.");
- }
- return 1;
- }
- CMD:addbuspoint(playerid, params[])
- {
- if sPlayerInfo[playerid][bAdmin] != 1 *then {
- return 1;
- }
- new Float:x, Float:y, Float:z;
- GetPlayerPos(playerid, x,y,z);
- AddBusPoint(x, y, z);
- return 1;
- }
- /* Stock Functions */
- new megastr[512];
- stock SCME(playerid, color, const string[], { Float, _ }: ...) // SCME(playerid, CL, "%d", number);
- {
- new
- tempString[MAX_STRING],
- parts[64],
- tempLen,
- totalFound,
- i,
- j,
- t;
- memcpy(tempString, string, _, (strlen(string) + 1) * 4);
- for(i = 0; tempString[i] != 0; ++i)
- {
- for(j = 0; parts[j] != 0; ++j)
- {
- parts[j] = '\0';
- }
- switch(tempString[i])
- {
- case 's', 'S', 'i', 'I', 'd', 'D', 'f', 'F', 'c', 'C', 'x', 'X', 'b', 'B':
- {
- if tempString[(i > 0) ? (i - 1) : (i)] != '%' *then
- {
- continue;
- }
- else if tempString[(i > 0) ? (i - 1) : (i)] == '%' *then
- {
- ++totalFound;
- if tempString[i] == 's' || tempString[i] == 'S' *then
- {
- for(j = 0; getarg(totalFound + 2, j) != 0; ++j)
- {
- parts[j] = getarg(totalFound + 2, j);
- }
- }
- switch(tempString[i])
- {
- case 'd', 'D', 'i', 'I': format(parts, sizeof(parts), "%d", getarg(totalFound + 2));
- case 'f', 'F': format(parts, sizeof(parts), "%.02f", getarg(totalFound + 2));
- case 'c', 'C': format(parts, sizeof(parts), "%c", getarg(totalFound + 2));
- case 'x', 'X': format(parts, sizeof(parts), "%x", getarg(totalFound + 2));
- case 'b', 'B': format(parts, sizeof(parts), "%b", getarg(totalFound + 2));
- }
- tempLen = strlen(parts);
- if tempLen > 2 *then
- {
- for(j = 0; j != (tempLen - 2); ++j)
- {
- strins(tempString, "_", (i + 1));
- }
- for(j = 0, t = 0; tempString[j] != 0; ++j)
- {
- if j >= (i - 1) && t < tempLen *then
- {
- tempString[j] = parts[t];
- ++t;
- }
- }
- continue;
- }
- else if tempLen == 2 *then
- {
- for(j = 0, t = 0; tempString[j] != 0; ++j)
- {
- if j == i || j == (i - 1) *then
- {
- tempString[j] = parts[t];
- ++t;
- }
- }
- continue;
- }
- else if tempLen < 2 *then
- {
- strdel(tempString, i, i+1);
- for(j = 0, t = 0; tempString[j] != 0; ++j)
- {
- if j == (i - 1) *then
- {
- tempString[j] = parts[t];
- ++t;
- }
- }
- continue;
- }
- }
- }
- }
- }
- if playerid != INVALID_PLAYER_ID *then
- SendClientMessage(playerid, color, tempString);
- else
- SendClientMessageToAll(color, tempString);
- return 1;
- }
- setPlayerDuty(playerid, var)
- {
- foreach(Player, i) {
- SCME(playerid, -1, (var) ? ("%s has gone {00FF00}ON{FFFFFF} duty as a bus driver!") : ("%s has gone {FF0000}OFF{FFFFFF} duty as a bus driver!"), gName(playerid));
- }
- return 1;
- }
- stock bCall(playerid)
- {
- foreach(Player, driver) {
- if isDriver(driver) *then
- SCME(driver, -1, "%s [id: %d) is waiting at a bus stop. (/acceptcall)",gName(playerid),playerid);
- }
- return 1;
- }
- stock gName(playerid)
- {
- new Name[MAX_PLAYER_NAME];
- GetPlayerName(playerid, Name, sizeof(Name));
- return Name;
- }
- stock updateBusPoint(bus)
- {
- format(megastr,sizeof(megastr),"UPDATE `buspoints` SET `bX` = '%f', `bY` = '%f', `bZ` = '%f', `Taken` = %d, `Disabled` = %d WHERE `bid` = '%d'", BusInfo[bus[bX],BusInfo[bus][bY],BusInfo[bus][bZ],BusInfo[bus][bTaken],BusInfo[bus][bDisabled],BusInfo[bus][bid]);
- mysql_function_query(SQLHandle, megastr, false, "bForward", "i", bus);
- return 1;
- }
- stock AddBusPoint(Float:x, Float:y, Float:z, taken=1, disabled=0)
- {
- format(megastr,sizeof(megastr),"INSERT INTO `buspoints` (`bX`, `bY`, `bZ`, `Taken`, `Disabled`) VALUES ('%f', '%f', '%f', '%d', '%d')", x, y, z, taken,disabled);
- mysql_function_query(SQLHandle, megastr, false, "bEForward", "");
- }
- public bForward(bus)
- {
- Bus_LoadStops();
- return 1;
- }
- public bEForward()
- {
- Bus_LoadStops();
- return 1;
- }
- public Bus_LoadStops()
- {
- format(megastr,sizeof(megastr),"SELECT * FROM `buspoints`");
- mysql_function_query(SQLHandle, megastr, true, "getPoints", "");
- }
- public getPoints()
- {
- new fields, rows, fetch[MAX_STRING];
- cache_get_data(rows, fields, SQLHandle);
- for(new i; i < rows; i++)
- {
- cache_get_field_content(i, "bid", fetch, SQLHandle, MAX_STRING);
- BusInfo[i][bid] = strval(fetch);
- cache_get_field_content(i, "bX", fetch, SQLHandle, MAX_STRING);
- BusInfo[i][bX] = floatstr(fetch);
- cache_get_field_content(i, "bY", fetch, SQLHandle, MAX_STRING);
- BusInfo[i][bY] = floatstr(fetch);
- cache_get_field_content(i, "bZ", fetch, SQLHandle, MAX_STRING);
- BusInfo[i][bZ] = floatstr(fetch);
- cache_get_field_content(i, "Taken", fetch, SQLHandle, MAX_STRING);
- BusInfo[i][bTaken] = strval(fetch);
- cache_get_field_content(i, "Disabled", fetch, SQLHandle, MAX_STRING);
- BusInfo[i][bDisabled] = strval(fetch);
- }
- for(new i; i < MAX_POINTS; i++)
- {
- CreateDynamic3DTextLabel("Bus Point - /bcall", -1, BusInfo[i][bX], BusInfo[i][bY], BusInfo[i][bZ] + 3.0, 40.0);
- }
- printf("* %d bus points were loaded.", rows);
- return 1;
- }
- public Load_Driver(playerid)
- {
- format(megastr,sizeof(megastr),"SELECT * FROM `drivers` WHERE Username = '%s'",gName(playerid));
- mysql_function_query(SQLHandle, megastr, true, "getDriver", "i", playerid);
- }
- public getDriver(playerid)
- {
- new rows, fields, fetch[MAX_STRING];
- cache_get_data(rows, fields, SQLHandle);
- if rows *then {
- cache_get_field_content(0, "sDriver", fetch, SQLHandle, MAX_STRING);
- sPlayerInfo[playerid][sDriver] = strval(fetch);
- cache_get_field_content(0, "bAdmin", fetch, SQLHandle, MAX_STRING);
- sPlayerInfo[playerid][bAdmin] = strval(fetch);
- }
- else {
- new num = 0, num2 = 0;
- format(megastr,sizeof(megastr),"INSERT INTO `drivers` (Username, sDriver, bAdmin) VALUES ('%s','%d',%d)",gName(playerid),num, num2);
- mysql_function_query(SQLHandle, megastr, false, "Load_Driver", "i", playerid);
- }
- return 1;
- }
- public SaveDriver(playerid)
- {
- format(megastr,sizeof(megastr),"UPDATE `drivers` SET sDriver = %d, bAdmin = %d WHERE Username = '%s'", sPlayerInfo[playerid][sDriver], sPlayerInfo[bAdmin], gName(playerid));
- mysql_function_query(SQLHandle, megastr, false, "finalSave", "i", playerid);
- }
- forward public finalSave(playerid);
- public finalSave(playerid)
- {
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment