Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <a_samp>
- #include <zcmd>
- // finish carcolor and setcar.
- #define ZCMD:%1(%2,%3) \
- forward zcmd_%1(%2, %3); \
- public zcmd_%1(%2, %3)
- #define mysql_escape_string(%1,%2) mysql_real_escape_string(%1,%2)
- #define mysql_fetch_row(%0) mysql_fetch_row_format(%0,"|")
- #define mysql_get_field(%1,%2) mysql_fetch_field_row(%2,%1)
- #define SQL_HOST ""
- #define SQL_PASS ""
- #define SQL_USER ""
- #define SQL_DATABASE ""
- native mysql_connect(const host[],const user[],const database[],const password[]);
- native mysql_query(query[],resultid = (-1));
- native mysql_real_escape_string(const source[],destination[]);
- native mysql_fetch_row_format(string[],const delimiter[] = "|");
- native mysql_num_rows();
- native mysql_num_fields();
- native mysql_affected_rows();
- native mysql_warning_count();
- native mysql_ping();
- native mysql_store_result();
- native mysql_free_result();
- native mysql_stat(const destination[]);
- native mysql_errno();
- native mysql_field_count();
- native mysql_close();
- native mysql_fetch_int();
- native mysql_fetch_float(&Float:result);
- native mysql_fetch_field(fieldnr,dest[]);
- native mysql_fetch_field_row(string[],const fieldname[]);
- native mysql_debug(enable = 1);
- native mysql_reload();
- native mysql_insert_id();
- forward OnQueryFinish(query[],resultid);
- enum VehicleInfo
- {
- vModelId,
- Float:vPos_X,
- Float:vPos_Y,
- Float:vPos_Z,
- Float:vPos_A,
- vColor1,
- vColor2,
- bool:vBuyAble,
- vPrice,
- vOwnerName[MAX_PLAYER_NAME],
- };
- new
- vInfo[MAX_VEHICLES][VehicleInfo],
- string[512];
- bool:IntToBool(val)
- {
- if(val)
- {
- return true;
- }
- return false;
- }
- stock BoolToInt(bool:var)
- {
- if(var)
- {
- return 1;
- }
- return 0;
- }
- public OnFilterScriptInit()
- {
- new
- connection=mysql_connect(SQL_HOST,SQL_USER,SQL_DATABASE,SQL_PASS);
- if(connection==1)
- {
- print("Connection succeeded.");
- LoadVehicles();
- }
- else
- {
- print("Connection failed.");
- }
- return 1;
- }
- public OnFilterScriptExit()
- {
- if(mysql_ping())
- {
- for(new v=1;v<MAX_VEHICLES;v++)
- {
- if(vInfo[v][vModelId])
- {
- SaveVehicle(v);
- }
- }
- mysql_close();
- }
- return 1;
- }
- stock LoadVehicles()
- {
- mysql_query("SELECT * FROM vehicles");
- mysql_store_result();
- if(mysql_num_rows())
- {
- new
- vid,
- result[256];
- while(mysql_fetch_row(result))
- {
- sscanf(result,"p|d",vid);
- sscanf(result,"p|dffffdddds",vInfo[vid][vModelId],vInfo[vid][vPos_X],vInfo[vid][vPos_Y],vInfo[vid][vPos_Z],vInfo[vid][vPos_A],vInfo[vid][vColor1],vInfo[vid][vColor2],IntToBool(vInfo[vid][vBuyAble]),vInfo[vid][vPrice],vInfo[vid][vOwnerName]);
- CreateVehicle(vInfo[vid][vModelId],vInfo[vid][vPos_X],vInfo[vid][vPos_Y],vInfo[vid][vPos_Z],vInfo[vid][vPos_A],vInfo[vid][vColor1],vInfo[vid][vColor2],-1);
- }
- }
- mysql_free_result();
- }
- public OnPlayerStateChange(playerid, newstate, oldstate)
- {
- new
- vid=GetPlayerVehicleID(playerid);
- if(IsPlayerInAnyVehicle(playerid)&&GetPlayerState(playerid)==PLAYER_STATE_DRIVER)
- {
- if(vInfo[vid][vBuyAble]==true)
- {
- format(string,sizeof(string),"This vehicle is for sale, you can buy it for %d$ (/buyvehicle)",vInfo[vid][vPrice]);
- SendClientMessage(playerid,0x33CCFFFF,string);
- }
- else
- {
- if(!strcmp(GetPlayerNameEx(playerid),vInfo[vid][vOwnerName],true))
- {
- SendClientMessage(playerid,0x33CCFFFF,"Welcome to your vehicle.");
- }
- }
- }
- return 1;
- }
- stock GetPlayerNameEx(playerid)
- {
- new n[MAX_PLAYER_NAME];
- GetPlayerName(playerid,n,sizeof(n));
- return n;
- }
- ZCMD:buyvehicle(playerid,params[])
- {
- if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,0x33CCFFFF,"You are not in a vehicle.");
- new
- vid=GetPlayerVehicleID(playerid);
- if(!vInfo[vid][vBuyAble]) return SendClientMessage(playerid,0x33CCFFFF,"This vehicle is not for sale.");
- vInfo[vid][vBuyAble]=false;
- strmid(vInfo[vid][vOwnerName],GetPlayerNameEx(playerid),0,strlen(GetPlayerNameEx(playerid)),MAX_PLAYER_NAME);
- SendClientMessage(playerid,0x33CCFFFF,"You have bought this vehicle.");
- GivePlayerMoney(playerid,-vInfo[vid][vPrice]);
- return 1;
- }
- ZCMD:sellvehicle(playerid,params[])
- {
- if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,0x33CCFFFF,"You are not in a vehicle.");
- new
- vid=GetPlayerVehicleID(playerid);
- if(strcmp(vInfo[vid][vOwnerName],GetPlayerNameEx(playerid),true)) return SendClientMessage(playerid,0x33CCFFFF,"This vehicle does not belong to you.");
- GivePlayerMoney(playerid,vInfo[vid][vPrice]);
- format(vInfo[vid][vOwnerName],2," ");
- vInfo[vid][vBuyAble]=true;
- SendClientMessage(playerid,0x33CCFFFF,"You sold the vehicle and received the money.");
- return 1;
- }
- ZCMD:park(playerid,params[])
- {
- if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,0x33CCFFFF,"You are not in a vehicle.");
- new
- vid=GetPlayerVehicleID(playerid),
- Float:x,
- Float:y,
- Float:z,
- Float:a;
- if(strcmp(vInfo[vid][vOwnerName],GetPlayerNameEx(playerid),true)) return SendClientMessage(playerid,0x33CCFFFF,"This vehicle does not belong to you.");
- GetVehiclePos(vid,x,y,z);
- GetVehicleZAngle(vid,a);
- vInfo[vid][vPos_X]=x;
- vInfo[vid][vPos_Y]=y;
- vInfo[vid][vPos_Z]=z;
- vInfo[vid][vPos_A]=a;
- SendClientMessage(playerid,0x33CCFFFF,"Vehicle reparked.");
- return 1;
- }
- ZCMD:rcar(playerid,params[])
- {
- new
- Float:x,
- Float:y,
- Float:z;
- GetPlayerPos(playerid,x,y,z);
- for(new v=1;v<MAX_VEHICLES;v++)
- {
- if(!strcmp(vInfo[v][vOwnerName],GetPlayerNameEx(playerid),true))
- {
- SetVehiclePos(v,x,y,z);
- PutPlayerInVehicle(playerid,v,0);
- break;
- }
- else
- {
- SendClientMessage(playerid,0x33CCFFFF,"You don't have a vehicle.");
- break;
- }
- }
- return 1;
- }
- ZCMD:respawnall(playerid,params[])
- {
- if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,0x33CCFFFF,"You're not an admin.");
- for(new v=1;v<MAX_VEHICLES;v++)
- {
- SetVehicleToRespawn(v);
- }
- return 1;
- }
- ZCMD:wipecars(playerid,params[])
- {
- if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,0x33CCFFFF,"You're not an admin.");
- for(new v=1;v<MAX_VEHICLES;v++)
- {
- format(vInfo[v][vOwnerName],2," ");
- DestroyVehicle(v);
- }
- mysql_query("TRUNCATE TABLE vehicles");
- return 1;
- }
- ZCMD:killcar(playerid,params[])
- {
- if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,0x33CCFFFF,"You're not an admin.");
- if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,0x33CCFFFF,"You're not in a vehicle.");
- format(string,sizeof(string),"DELETE FROM vehicles WHERE id=%d",GetPlayerVehicleID(playerid));
- mysql_query(string);
- DestroyVehicle(GetPlayerVehicleID(playerid));
- return 1;
- }
- ZCMD:setcar(playerid,params[])
- {
- if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,0x33CCFFFF,"You're not an admin.");
- if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,0x33CCFFFF,"You're not in a vehicle.");
- new
- id;
- if(sscanf(params,"u",id)) return SendClientMessage(playerid,0x33CCFFFF,"Usage: /setcar [playerid]");
- if(!IsPlayerConnected(id)) return SendClientMessage(playerid,0x33CCFFFF,"This player is not connected.");
- new
- vid=GetPlayerVehicleID(playerid);
- format(vInfo[vid][vOwnerName],24,"%s",GetPlayerNameEx(id));
- format(string,sizeof(string),"You gave this vehicle to %s.",GetPlayerNameEx(id));
- SendClientMessage(playerid,0x33CCFFFF,string);
- return 1;
- }
- ZCMD:carcolor(playerid,params[])
- {
- if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,0x33CCFFFF,"You're not in a vehicle.");
- new
- color1,
- color2,
- vid=GetPlayerVehicleID(playerid);
- if(sscanf(params,"dd",color1,color2)) return SendClientMessage(playerid,0x33CCFFFF,"Usage: /carcolor [color 1] [color2]");
- if(strcmp(vInfo[vid][vOwnerName],GetPlayerNameEx(playerid),true)) return SendClientMessage(playerid,0x33CCFFFF,"This vehicle does not belong to you.");
- vInfo[vid][vColor1]=color1;
- vInfo[vid][vColor2]=color2;
- ChangeVehicleColor(vid,color1,color2);
- return 1;
- }
- stock SaveVehicle(vid)
- {
- format(string,sizeof(string),"UPDATE vehicles SET Model=%d,X=%f,Y=%f,Z=%f,A=%f,Color1=%d,Color2=%d,Buyable=%d,Price=%d,Owner='%s' WHERE id=%d",
- vInfo[vid][vModelId],vInfo[vid][vPos_X],vInfo[vid][vPos_Y],vInfo[vid][vPos_Z],vInfo[vid][vPos_A],vInfo[vid][vColor1],vInfo[vid][vColor2],
- BoolToInt(vInfo[vid][vBuyAble]),vInfo[vid][vPrice],vInfo[vid][vOwnerName],vid);
- mysql_query(string);
- }
- stock sscanf(str[], format[], {Float,_}:...)
- {
- #if defined isnull
- if (isnull(str))
- #else
- if (str[0] == 0 || (str[0] == 1 && str[1] == 0))
- #endif
- {
- return format[0];
- }
- #pragma tabsize 4
- new
- formatPos = 0,
- stringPos = 0,
- paramPos = 2,
- paramCount = numargs(),
- delim = ' ';
- while (str[stringPos] && str[stringPos] <= ' ')
- {
- stringPos++;
- }
- while (paramPos < paramCount && str[stringPos])
- {
- switch (format[formatPos++])
- {
- case '\0':
- {
- return 0;
- }
- case 'i', 'd':
- {
- new
- neg = 1,
- num = 0,
- ch = str[stringPos];
- if (ch == '-')
- {
- neg = -1;
- ch = str[++stringPos];
- }
- do
- {
- stringPos++;
- if ('0' <= ch <= '9')
- {
- num = (num * 10) + (ch - '0');
- }
- else
- {
- return -1;
- }
- }
- while ((ch = str[stringPos]) > ' ' && ch != delim);
- setarg(paramPos, 0, num * neg);
- }
- case 'h', 'x':
- {
- new
- num = 0,
- ch = str[stringPos];
- do
- {
- stringPos++;
- switch (ch)
- {
- case 'x', 'X':
- {
- num = 0;
- continue;
- }
- case '0' .. '9':
- {
- num = (num << 4) | (ch - '0');
- }
- case 'a' .. 'f':
- {
- num = (num << 4) | (ch - ('a' - 10));
- }
- case 'A' .. 'F':
- {
- num = (num << 4) | (ch - ('A' - 10));
- }
- default:
- {
- return -1;
- }
- }
- }
- while ((ch = str[stringPos]) > ' ' && ch != delim);
- setarg(paramPos, 0, num);
- }
- case 'c':
- {
- setarg(paramPos, 0, str[stringPos++]);
- }
- case 'f':
- {
- setarg(paramPos, 0, _:floatstr(str[stringPos]));
- }
- case 'p':
- {
- delim = format[formatPos++];
- continue;
- }
- case '\'':
- {
- new
- end = formatPos - 1,
- ch;
- while ((ch = format[++end]) && ch != '\'') {}
- if (!ch)
- {
- return -1;
- }
- format[end] = '\0';
- if ((ch = strfind(str, format[formatPos], false, stringPos)) == -1)
- {
- if (format[end + 1])
- {
- return -1;
- }
- return 0;
- }
- format[end] = '\'';
- stringPos = ch + (end - formatPos);
- formatPos = end + 1;
- }
- case 'u':
- {
- new
- end = stringPos - 1,
- id = 0,
- bool:num = true,
- ch;
- while ((ch = str[++end]) && ch != delim)
- {
- if (num)
- {
- if ('0' <= ch <= '9')
- {
- id = (id * 10) + (ch - '0');
- }
- else
- {
- num = false;
- }
- }
- }
- if (num && IsPlayerConnected(id))
- {
- setarg(paramPos, 0, id);
- }
- else
- {
- #if !defined foreach
- #define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
- #define __SSCANF_FOREACH__
- #endif
- str[end] = '\0';
- num = false;
- id = end - stringPos;
- new
- name[MAX_PLAYER_NAME];
- foreach (Player, playerid)
- {
- GetPlayerName(playerid,name,sizeof(name));
- if(!strcmp(name,str[stringPos],true,id))
- {
- setarg(paramPos, 0, playerid);
- num = true;
- break;
- }
- }
- if (!num)
- {
- setarg(paramPos, 0, INVALID_PLAYER_ID);
- }
- str[end] = ch;
- #if defined __SSCANF_FOREACH__
- #undef foreach
- #undef __SSCANF_FOREACH__
- #endif
- }
- stringPos = end;
- }
- case 's', 'z':
- {
- new
- i = 0,
- ch;
- if (format[formatPos])
- {
- while ((ch = str[stringPos++]) && ch != delim)
- {
- setarg(paramPos, i++, ch);
- }
- if (!i)
- {
- return -1;
- }
- }
- else
- {
- while ((ch = str[stringPos++]))
- {
- setarg(paramPos, i++, ch);
- }
- }
- stringPos--;
- setarg(paramPos, i, '\0');
- }
- default:
- {
- continue;
- }
- }
- while (str[stringPos] && str[stringPos] != delim && str[stringPos] > ' ')
- {
- stringPos++;
- }
- while (str[stringPos] && (str[stringPos] == delim || str[stringPos] <= ' '))
- {
- stringPos++;
- }
- paramPos++;
- }
- do
- {
- if ((delim = format[formatPos++]) > ' ')
- {
- if (delim == '\'')
- {
- while ((delim = format[formatPos++]) && delim != '\'') {}
- }
- else if (delim != 'z')
- {
- return delim;
- }
- }
- }
- while (delim > ' ');
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment