Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Crate System
- Made by Jelly23
- */
- #define FILTERSCRIPT
- /*Config*/
- #define MAX_CRATES 500
- #define CRATE_COST 10000
- /*Includes*/
- #include <a_samp>
- #include <a_mysql>
- #include <izcmd>
- #include <foreach>
- #include <streamer>
- /*MySQL*/
- #define host "localhost"
- #define user "root"
- #define db "crates"
- #define pass ""
- new mysql;
- /*Enumerator*/
- enum jCrate
- {
- CrateID,
- Text3D:Label,
- Weapon1,
- Weapon2,
- Weapon3,
- Ammo1,
- Ammo2,
- Ammo3,
- Float:cX,
- Float:cY,
- Float:cZ,
- cWorld,
- cInterior
- };
- new cInfo[MAX_CRATES][jCrate];
- /*Iterator*/
- new Iterator:CrateLoop<MAX_CRATES>;
- /*Array(s)*/
- new CurrentCrate[MAX_PLAYERS],
- bool:HasBox[MAX_PLAYERS];
- /*Dialog(s)*/
- #define DIALOG_CRATE (0)
- #define DIALOG_RCON (1)
- #define DIALOG_CRTGO (2)
- #define DIALOG_CRTET (3)
- #if defined FILTERSCRIPT
- public OnFilterScriptInit()
- {
- print("\n--------------------------------------");
- print(" Crate System");
- print("--------------------------------------\n");
- new query[24];
- mysql_log(LOG_ERROR | LOG_WARNING | LOG_DEBUG);
- mysql = mysql_connect(host, user, db, pass);
- if(mysql_errno(mysql) != 0)
- {
- print("Could not connect to database!"); SendRconCommand("hostname MYSQL| ERROR");
- }
- else
- {
- printf("MYSQL:: Connected Successfully To Database (%s)",db);
- }
- mysql_format(mysql, query, sizeof(query), "SELECT * FROM `crates`");
- if(!mysql_tquery(mysql, query, "LoadCrates", ""))
- {
- printf("[MySQL | ERROR]: Couldn't load the crates");
- }
- return 1;
- }
- public OnFilterScriptExit()
- {
- SaveCrates();
- return 1;
- }
- #else
- main()
- {
- print("\n----------------------------------");
- print(" Crate System");
- print("----------------------------------\n");
- }
- #endif
- /*Functions*/
- CreateCrate(Float:X, Float:Y, Float:Z, world, interior)
- {
- new FreeID = Iter_Free(CrateLoop),string[21],query[300];
- Iter_Add(CrateLoop, FreeID);
- format(string,sizeof(string),"Weapon Crate (%i)",FreeID);
- cInfo[FreeID][CrateID] = CreateDynamicObject(3014, X, Y, Z-0.8, 0.0, 0.0, 0.0, world);
- cInfo[FreeID][Label] = Create3DTextLabel(string, 0xAA3333FF,X,Y,Z-0.4, 5.0,world, 0);
- cInfo[FreeID][cX] = X;
- cInfo[FreeID][cY] = Y;
- cInfo[FreeID][cZ] = Z-0.8;
- cInfo[FreeID][Weapon1] = cInfo[FreeID][Weapon2] = cInfo[FreeID][Weapon3] = -1;
- cInfo[FreeID][cWorld] = world;
- cInfo[FreeID][cInterior] = interior;
- mysql_format(mysql, query, sizeof(query), "INSERT INTO `crates` (`ID`, `cX`, `cY`, `cZ`, `Weapon1`, `Weapon2` ,`Weapon3`, `Ammo1`, `Ammo2`, `Ammo3`) VALUES ('%i', '%f', '%f', '%f', '%i', '%i', '%i', '%i','%i', '%i')",
- FreeID,cInfo[FreeID][cX],cInfo[FreeID][cY],cInfo[FreeID][cZ],cInfo[FreeID][Weapon1],cInfo[FreeID][Weapon2],cInfo[FreeID][Weapon3],cInfo[FreeID][Ammo1],cInfo[FreeID][Ammo2],cInfo[FreeID][Ammo3]);
- mysql_tquery(mysql, query, "","");
- return 1;
- }
- DestroyCrate(crateid)
- {
- new query[41];
- Iter_Remove(CrateLoop, crateid);
- DestroyDynamicObject(cInfo[crateid][CrateID]);
- Delete3DTextLabel(cInfo[crateid][Label]);
- mysql_format(mysql,query,sizeof(query),"DELETE FROM `crates` WHERE `ID` ='%i'",crateid);
- mysql_tquery(mysql,query,"","");
- return 1;
- }
- GetWeapName(playerid,weapid,slot)
- {
- new weapname[46];
- if(weapid == -1)
- {
- weapname = "Empty";
- }
- else
- {
- GetWeaponName(weapid, weapname, sizeof(weapname));
- switch(slot)
- {
- case 0: format(weapname,sizeof(weapname),"%s - Ammo: %i",weapname,cInfo[CurrentCrate[playerid]][Ammo1]);
- case 1: format(weapname,sizeof(weapname),"%s - Ammo: %i",weapname,cInfo[CurrentCrate[playerid]][Ammo2]);
- case 2: format(weapname,sizeof(weapname),"%s - Ammo: %i",weapname,cInfo[CurrentCrate[playerid]][Ammo3]);
- }
- }
- return weapname;
- }
- SaveCrates()
- {
- new count;
- foreach(new i: CrateLoop)
- {
- UpdateCrates(i);
- count++;
- }
- printf("\n=======================================\n");
- printf(" Crate system saved!\n");
- printf(" A total of %i Crates out of %i loaded\n", count, MAX_CRATES);
- printf("\n=======================================\n");
- }
- UpdateCrates(i)
- {
- new query[321];
- mysql_format(mysql, query, sizeof(query), "UPDATE `crates` SET `cX` ='%f' , `cY` ='%f' , `cZ` ='%f' , `Weapon1` ='%i', `Weapon2` = '%i', `Weapon3` ='%i', `Ammo1` ='%i', `Ammo2` ='%i', `Ammo3` ='%i' WHERE `ID` = '%i'",
- cInfo[i][cX],cInfo[i][cY],cInfo[i][cZ],cInfo[i][Weapon1],cInfo[i][Weapon2],cInfo[i][Weapon3],cInfo[i][Ammo1],cInfo[i][Ammo2],cInfo[i][Ammo3],i);
- mysql_tquery(mysql,query,"","");
- }
- DropCrate(playerid)
- {
- new Float:X,Float:Y,Float:Z,string[21];
- format(string,sizeof(string),"Weapon Crate (%i)",CurrentCrate[playerid]);
- GetPlayerPos(playerid,X,Y,Z);
- HasBox[playerid] = false;
- cInfo[CurrentCrate[playerid]][CrateID] = CreateDynamicObject(3014, X, Y, Z-0.8, 0.0, 0.0, 0.0, GetPlayerVirtualWorld(playerid));
- cInfo[CurrentCrate[playerid]][Label] = Create3DTextLabel(string, 0xAA3333FF,X,Y,Z-0.4, 5.0,GetPlayerVirtualWorld(playerid), 0);
- cInfo[CurrentCrate[playerid]][cX] = X;
- cInfo[CurrentCrate[playerid]][cY] = Y;
- cInfo[CurrentCrate[playerid]][cZ] = Z-0.8;
- RemovePlayerAttachedObject(playerid,0);
- }
- /*Commands*/
- CMD:buycrate(playerid)
- {
- if(GetPlayerMoney(playerid) < CRATE_COST) return SendClientMessage(playerid,-1,"You need $10,000 in order to buy an empty crate.");
- new Float:X,Float:Y,Float:Z;
- GetPlayerPos(playerid,X,Y,Z);
- GivePlayerMoney(playerid,-CRATE_COST);
- CreateCrate(X,Y,Z,GetPlayerVirtualWorld(playerid),GetPlayerInterior(playerid));
- return 1;
- }
- CMD:crate(playerid)
- {
- new count;
- foreach(new i: CrateLoop)
- {
- if(IsPlayerInRangeOfPoint(playerid, 1.5, cInfo[i][cX], cInfo[i][cY], cInfo[i][cZ]))
- {
- CurrentCrate[playerid] = i;
- count++;
- }
- }
- if(count == 0) return SendClientMessage(playerid,-1,"{FFFF00}[!] {FFFFFF}You are not next to any weapon crate");
- new string[128];
- format(string,sizeof(string),"%s» %s\n» %s\n» %s\n{FF0000}» Put Gun\n{FF0000}» Pick it up",
- string,GetWeapName(playerid,cInfo[CurrentCrate[playerid]][Weapon1],0),GetWeapName(playerid,cInfo[CurrentCrate[playerid]][Weapon2],1),GetWeapName(playerid,cInfo[CurrentCrate[playerid]][Weapon3],2));
- ShowPlayerDialog(playerid, DIALOG_CRATE, DIALOG_STYLE_LIST, "Weapon Crate",string, "Select", "Cancel");
- return 1;
- }
- CMD:ctest(playerid)
- {
- if(IsPlayerAdmin(playerid))
- {
- GivePlayerWeapon(playerid,24,100);
- }
- return 1;
- }
- CMD:cmenu(playerid)
- {
- if(IsPlayerAdmin(playerid))
- {
- new count,string[128];
- foreach(new c: CrateLoop)
- {
- count++;
- }
- format(string,sizeof(string),"%s» Destroy all crates {FF0000}(%i)\n{FFFFFF}» Destroy closest crate\n» Reset closest crate\n» Create crate\n» Goto crate\n» Edit crate position",string,count);
- ShowPlayerDialog(playerid, DIALOG_RCON, DIALOG_STYLE_LIST, "Crate Menu",string, "Select", "Cancel");
- }
- return 1;
- }
- /*Callbacks*/
- public OnPlayerConnect(playerid)
- {
- HasBox[playerid] = false;
- CurrentCrate[playerid] = -1;
- return 1;
- }
- public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
- {
- if(dialogid == DIALOG_CRATE)
- {
- if(response)
- {
- switch(listitem)
- {
- case 0:
- {
- if(cInfo[CurrentCrate[playerid]][Weapon1] == -1)
- {
- SendClientMessage(playerid,-1,"{FFFF00}[!] {FFFFFF}That slot is empty.");
- }
- else
- {
- GivePlayerWeapon(playerid,cInfo[CurrentCrate[playerid]][Weapon1],cInfo[CurrentCrate[playerid]][Ammo1]);
- cInfo[CurrentCrate[playerid]][Weapon1] = -1;
- }
- }
- case 1:
- {
- if(cInfo[CurrentCrate[playerid]][Weapon2] == -1)
- {
- SendClientMessage(playerid,-1,"{FFFF00}[!] {FFFFFF}That slot is empty.");
- }
- else
- {
- GivePlayerWeapon(playerid,cInfo[CurrentCrate[playerid]][Weapon2],cInfo[CurrentCrate[playerid]][Ammo2]);
- cInfo[CurrentCrate[playerid]][Weapon2] = -1;
- }
- }
- case 2:
- {
- if(cInfo[CurrentCrate[playerid]][Weapon3] == -1)
- {
- SendClientMessage(playerid,-1,"{FFFF00}[!] {FFFFFF}That slot is empty.");
- }
- else
- {
- GivePlayerWeapon(playerid,cInfo[CurrentCrate[playerid]][Weapon3],cInfo[CurrentCrate[playerid]][Ammo3]);
- cInfo[CurrentCrate[playerid]][Weapon3] = -1;
- }
- }
- case 3:
- {
- if(cInfo[CurrentCrate[playerid]][Weapon1] != -1 && cInfo[CurrentCrate[playerid]][Weapon2] != -1 && cInfo[CurrentCrate[playerid]][Weapon3] != -1)
- {
- SendClientMessage(playerid,-1,"{FFFF00}[!] {FFFFFF}This crate is full, you can't put any more weapons inside of it");
- }
- else
- {
- if(GetPlayerWeapon(playerid) == 0) return SendClientMessage(playerid,-1,"{FFFF00}[!] {FFFFFF}You have no weapon in hands");
- if(cInfo[CurrentCrate[playerid]][Weapon1] == -1)
- {
- cInfo[CurrentCrate[playerid]][Weapon1] = GetPlayerWeapon(playerid);
- cInfo[CurrentCrate[playerid]][Ammo1] = GetPlayerAmmo(playerid);
- SetPlayerAmmo(playerid,GetPlayerWeapon(playerid),0);
- return 1;
- }
- if(cInfo[CurrentCrate[playerid]][Weapon2] == -1)
- {
- cInfo[CurrentCrate[playerid]][Weapon2] = GetPlayerWeapon(playerid);
- cInfo[CurrentCrate[playerid]][Ammo2] = GetPlayerAmmo(playerid);
- SetPlayerAmmo(playerid,GetPlayerWeapon(playerid),0);
- return 1;
- }
- if(cInfo[CurrentCrate[playerid]][Weapon3] == -1)
- {
- cInfo[CurrentCrate[playerid]][Weapon3] = GetPlayerWeapon(playerid);
- cInfo[CurrentCrate[playerid]][Ammo3] = GetPlayerAmmo(playerid);
- SetPlayerAmmo(playerid,GetPlayerWeapon(playerid),0);
- return 1;
- }
- }
- }
- case 4:
- {
- ApplyAnimation(playerid, "CARRY", "crry_prtial", 4.0, 1, 1, 1, 1, 1),ApplyAnimation(playerid, "CARRY", "crry_prtial", 4.0, 1, 1, 1, 1, 1);
- DestroyDynamicObject(cInfo[CurrentCrate[playerid]][CrateID]);
- Delete3DTextLabel(cInfo[CurrentCrate[playerid]][Label]);
- SetPlayerAttachedObject(playerid, 0, 3014, 6, 0.000000, 0.207999, -0.184999, -105.700004, 3.399999, -8.600002, 1.000000, 1.000000, 1.000000);
- HasBox[playerid] = true;
- cInfo[CurrentCrate[playerid]][cX] = 0.0;
- cInfo[CurrentCrate[playerid]][cY] = 0.0;
- cInfo[CurrentCrate[playerid]][cZ] = 0.0;
- }
- }
- }
- }
- if(dialogid == DIALOG_RCON)
- {
- if(response)
- {
- switch(listitem)
- {
- case 0:
- {
- foreach(new i: CrateLoop)
- {
- DestroyCrate(i);
- }
- SendClientMessageToAll(-1,"{FFFF00}[!] {FFFFFF} All crates were destroyed by an admin.");
- }
- case 1:
- {
- new count = -1;
- foreach(new i: CrateLoop)
- {
- if(IsPlayerInRangeOfPoint(playerid, 1.5, cInfo[i][cX], cInfo[i][cY], cInfo[i][cZ]))
- {
- count = i;
- }
- }
- if(count == -1) return SendClientMessage(playerid,-1,"{FFFF00}[!] {FFFFFF}You are not next to any weapon crate");
- DestroyCrate(count);
- }
- case 2:
- {
- new count = -1;
- foreach(new i: CrateLoop)
- {
- if(IsPlayerInRangeOfPoint(playerid, 1.5, cInfo[i][cX], cInfo[i][cY], cInfo[i][cZ]))
- {
- count = i;
- }
- }
- if(count == -1) return SendClientMessage(playerid,-1,"{FFFF00}[!] {FFFFFF}You are not next to any weapon crate");
- cInfo[count][Weapon1] = cInfo[count][Weapon2] = cInfo[count][Weapon3] = -1;
- }
- case 3:
- {
- new Float:X,Float:Y,Float:Z;
- GetPlayerPos(playerid,X,Y,Z);
- CreateCrate(X,Y,Z,GetPlayerVirtualWorld(playerid),GetPlayerInterior(playerid));
- }
- case 4:
- {
- ShowPlayerDialog(playerid,DIALOG_CRTGO, DIALOG_STYLE_INPUT, "Crate Menu »{FFFFFF} Goto crate", "Enter the crate id below:", "Go", "Cancel");
- }
- case 5:
- {
- ShowPlayerDialog(playerid,DIALOG_CRTET, DIALOG_STYLE_INPUT, "Crate Menu »{FFFFFF} Edit crate position", "Enter the crate id below:", "Go", "Cancel");
- }
- }
- }
- }
- if(dialogid == DIALOG_CRTGO)
- {
- if(response)
- {
- if (!Iter_Contains(CrateLoop, strval(inputtext))) return SendClientMessage(playerid,-1,"{FFFF00}[!] {FFFFFF} There is no such crate id.");
- SetPlayerPos(playerid,cInfo[strval(inputtext)][cX],cInfo[strval(inputtext)][cY],cInfo[strval(inputtext)][cZ]+1);
- }
- }
- if(dialogid == DIALOG_CRTET)
- {
- if(response)
- {
- if (!Iter_Contains(CrateLoop, strval(inputtext))) return SendClientMessage(playerid,-1,"{FFFF00}[!] {FFFFFF} There is no such crate id.");
- EditDynamicObject(playerid, cInfo[strval(inputtext)][CrateID]);
- CurrentCrate[playerid] = strval(inputtext);
- Delete3DTextLabel(cInfo[strval(inputtext)][Label]);
- }
- }
- return 1;
- }
- public OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz)
- {
- new string[21];
- format(string,sizeof(string),"Weapon Crate (%i)",CurrentCrate[playerid]);
- if(response == EDIT_RESPONSE_FINAL)
- {
- cInfo[cInfo[CurrentCrate[playerid]][CrateID]][cX] = x;
- cInfo[cInfo[CurrentCrate[playerid]][CrateID]][cY] = y;
- cInfo[cInfo[CurrentCrate[playerid]][CrateID]][cZ] = z;
- cInfo[CurrentCrate[playerid]][Label] = Create3DTextLabel(string, 0xAA3333FF,x,y,z+0.8-0.4, 5.0,GetPlayerVirtualWorld(playerid), 0);
- SetDynamicObjectPos(cInfo[CurrentCrate[playerid]][CrateID],x,y,z);
- SetDynamicObjectRot(cInfo[CurrentCrate[playerid]][CrateID],rx,ry,rz);
- SendClientMessage(playerid,-1,"{FFFF00}[!] {FFFFFF} New object position saved.");
- }
- else if(response == EDIT_RESPONSE_CANCEL)
- {
- cInfo[CurrentCrate[playerid]][Label] = Create3DTextLabel(string, 0xAA3333FF,cInfo[CurrentCrate[playerid]][cX],cInfo[CurrentCrate[playerid]][cY],cInfo[CurrentCrate[playerid]][cZ]+0.8-0.4, 5.0,GetPlayerVirtualWorld(playerid), 0);
- SetDynamicObjectPos(cInfo[CurrentCrate[playerid]][CrateID],cInfo[CurrentCrate[playerid]][cX],cInfo[CurrentCrate[playerid]][cY],cInfo[CurrentCrate[playerid]][cZ]);
- }
- return 1;
- }
- public OnPlayerSpawn(playerid)
- {
- if(HasBox[playerid] == true)
- {
- DropCrate(playerid);
- }
- return 1;
- }
- public OnPlayerDeath(playerid,killerid,reason)
- {
- if(HasBox[playerid] == true)
- {
- DropCrate(playerid);
- }
- return 1;
- }
- forward LoadCrates();
- public LoadCrates()
- {
- new t,string[21];
- for(new i = 0; i < cache_get_row_count(); i++)
- {
- t = cache_get_field_content_int(i,"ID");
- Iter_Add(CrateLoop,t);
- cInfo[t][cX] = cache_get_field_content_float(i, "cX");
- cInfo[t][cY] = cache_get_field_content_float(i, "cY");
- cInfo[t][cZ] = cache_get_field_content_float(i, "cZ");
- format(string,sizeof(string),"Weapon Crate (%i)",t);
- cInfo[t][CrateID] = CreateDynamicObject(3014, cInfo[t][cX], cInfo[t][cY], cInfo[t][cZ], 0.0, 0.0, 0.0, 0);
- cInfo[t][Label] = Create3DTextLabel(string, 0xAA3333FF,cInfo[t][cX],cInfo[t][cY],cInfo[t][cZ]+0.8-0.4, 5.0,0, 0);
- cInfo[t][Weapon1] = cache_get_field_content_int(i,"Weapon1");
- cInfo[t][Weapon2] = cache_get_field_content_int(i,"Weapon2");
- cInfo[t][Weapon3] = cache_get_field_content_int(i,"Weapon3");
- cInfo[t][Ammo1] = cache_get_field_content_int(i,"Ammo1");
- cInfo[t][Ammo2] = cache_get_field_content_int(i,"Ammo2");
- cInfo[t][Ammo3] = cache_get_field_content_int(i,"Ammo3");
- }
- printf("\n=======================================\n");
- printf(" Crate system loaded!\n");
- printf(" A total of %d Crates out of %d loaded\n", cache_get_row_count(), MAX_CRATES);
- printf("\n=======================================\n");
- }
- public OnPlayerDisconnect(playerid,reason)
- {
- if(HasBox[playerid] == true)
- {
- DropCrate(playerid);
- }
- }
- public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
- {
- if (newkeys & KEY_YES)
- {
- if(HasBox[playerid] == true)
- {
- DropCrate(playerid);
- SetPlayerSkin(playerid,GetPlayerSkin(playerid));
- }
- }
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment