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.3"
- /***** REQUIRED *******/
- #define SQL_SERVER ""
- #define SQL_USER ""
- #define SQL_DATABASE ""
- #define SQL_PASSWORD ""
- /**********************/
- #define MAX_STRING (1024)
- #define MAX_POINTS (20) /* Can be adjusted */
- /* 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];
- new hasCall[MAX_PLAYERS];
- new bDuty[MAX_PLAYERS];
- /* Public Methods */
- public OnFilterScriptInit()
- {
- SQLHandle = mysql_connect(SQL_SERVER, SQL_USER, SQL_DATABASE, SQL_PASSWORD);
- new ping = mysql_ping(SQLHandle);
- if(ping != -1) {
- printf("* Connection to "#SQL_SERVER" successful with %d ping", 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[])
- {
- if(isDriver(playerid)) {
- SCME(playerid, -1, "You are an authorized bus driver.");
- }
- else {
- return SendClientMessage(playerid, -1, "You are not a bus driver.");
- }
- return 1;
- }
- CMD:bduty(playerid, params[])
- {
- 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)) {
- 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)) {
- 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 r;
- new id[MAX_POINTS];
- for(new i; i < MAX_POINTS; i++) {
- if(IsPlayerInRangeOfPoint(playerid, 20.0, BusInfo[i][bX], BusInfo[i][bY], BusInfo[i][bZ])) {
- 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)) {
- 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, number;
- if(IsPlayerAdmin(playerid)) {
- if(sscanf(params,"ud",giveplayerid,number)) return SCME(playerid, -1, "Usage: /makedriver [player] [0 or 1]");
- if(number > 1 || number < 0) return SCME(playerid, -1, "Usage: /makedriver [player] [0 or 1]");
- sPlayerInfo[giveplayerid][sDriver] = number;
- }
- 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) {
- 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)) {
- if(onCall[playerid] == 1) {
- return SCME(playerid, -1, "Perhaps you should pick up the other player first?");
- }
- if(sscanf(params, "u",giveplayerid)) return SCME(playerid,-1, "Usage: /acceptcall [player]");
- if(hasCall[giveplayerid] == 1) {
- 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 {
- 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:bchanges(playerid, params[])
- {// got lazy, didn't finish. (GL;DF)
- Feature(playerid, 1, "/makedriver command.");
- Feature(playerid, 1, "/bcancel command.");
- Feature(playerid, 1, "/bcall command.");
- Feature(playerid, 1, "/acceptcall command.");
- Feature(playerid, 1, "/br(adio) command.");
- Feature(playerid, 1, "/givebmod command.");
- Feature(playerid, 1, "/bmods command.");
- Feature(playerid, 1, "/bnear command.");
- Feature(playerid, 1, "Added MySQL Structure.");
- Feature(playerid, 1, "Concept to Code.");
- Feature(playerid, 1, "Commands Structure.");
- Feature(playerid, 1, "Player enumerators.");
- Feature(playerid, 3, "Stock methods moved to bFunc.");
- return 1;
- }
- CMD:br(playerid, params[]) { return cmd_bradio(playerid, params); }
- CMD:bradio(playerid, params[])
- {
- if(isDriver(playerid)) {
- 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) {
- 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 Feature(playerid,nid,text[])
- {
- new nidform[128];
- if(nid == 1) {
- format(nidform,sizeof(nidform), "* {00FF00}Added{FFFFFF} %s",text);
- SCME(playerid, -1, nidform);
- }
- if(nid == 2) {
- format(nidform,sizeof(nidform), "* {FF0000}Removed{FFFFFF} %s",text);
- SCME(playerid, -1, nidform);
- }
- if(nid == 3) {
- format(nidform,sizeof(nidform), "* {FFFF00}Adjusted{FFFFFF} %s",text);
- SCME(playerid, -1, nidform);
- }
- if(nid == 4) {
- format(nidform,sizeof(nidform), "* {00FF00}FIXED{FFFFFF} %s",text);
- SCME(playerid, -1, nidform);
- }
- if(nid == 5) {
- format(nidform,sizeof(nidform), "* {00FF00}Re-Added{FFFFFF} %s",text);
- SCME(playerid, -1, nidform);
- }
- return 1;
- }
- 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)] != '%')
- {
- continue;
- }
- else if(tempString[(i > 0) ? (i - 1) : (i)] == '%')
- {
- ++totalFound;
- if(tempString[i] == 's' || tempString[i] == 'S')
- {
- 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)
- {
- 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)
- {
- tempString[j] = parts[t];
- ++t;
- }
- }
- continue;
- }
- else if(tempLen == 2)
- {
- for(j = 0, t = 0; tempString[j] != 0; ++j)
- {
- if(j == i || j == (i - 1))
- {
- tempString[j] = parts[t];
- ++t;
- }
- }
- continue;
- }
- else if(tempLen < 2)
- {
- strdel(tempString, i, i+1);
- for(j = 0, t = 0; tempString[j] != 0; ++j)
- {
- if(j == (i - 1))
- {
- tempString[j] = parts[t];
- ++t;
- }
- }
- continue;
- }
- }
- }
- }
- }
- if(playerid != INVALID_PLAYER_ID)
- SendClientMessage(playerid, color, tempString);
- else
- SendClientMessageToAll(color, tempString);
- return 1;
- }
- stock bCall(playerid)
- {
- foreach(Player, driver) {
- if(sPlayerInfo[driver][sDriver] == 1)
- {
- SCME(driver, -1, "%s [id: %d) is waiting at a bus stop. (/acceptcall)",gName(playerid),playerid);
- }
- }
- return 1;
- }
- stock isDriver(playerid)
- {
- if(sPlayerInfo[playerid][sDriver] == 1) return 1;
- return 0;
- }
- 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", "");
- }
- forward bForward(bus);
- public bForward(bus)
- {
- Bus_LoadStops();
- return 1;
- }
- forward bEForward();
- public bEForward()
- {
- Bus_LoadStops();
- return 1;
- }
- forward Bus_LoadStops();
- public Bus_LoadStops()
- {
- format(megastr,sizeof(megastr),"SELECT * FROM `buspoints`");
- mysql_function_query(SQLHandle, megastr, true, "getPoints", "");
- }
- forward 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;
- }
- forward Load_Driver(playerid);
- 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);
- }
- forward getDriver(playerid);
- public getDriver(playerid)
- {
- new rows, fields, fetch[MAX_STRING];
- cache_get_data(rows, fields, SQLHandle);
- if(rows) {
- 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;
- }
- forward SaveDriver(playerid);
- 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 finalSave(playerid);
- public finalSave(playerid)
- {
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment