Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Caixas de armas
- Jelly23
- */
- /*Config*/
- #define CAIXAS_MAXIMAS 500
- #define CAIXAS_CUSTO 10000
- /*Includes*/
- #include <a_samp>
- #include <a_mysql>
- #include <izcmd>
- #include <foreach>
- #include <streamer>
- /*MySQL*/
- #define MYSQL_HOST "localhost"
- #define MYSQL_USUARIO "root"
- #define MYSQL_BDADOS "crates"
- #define MYSQL_SENHA ""
- /*Enumerador*/
- enum jCrate
- {
- CrateID,
- Text3D:Label,
- Weapon1,
- Weapon2,
- Weapon3,
- Ammo1,
- Ammo2,
- Ammo3,
- Float:cX,
- Float:cY,
- Float:cZ,
- cWorld,
- cInterior
- };
- new cInfo[CAIXAS_MAXIMAS][jCrate],
- /*Iterator*/
- Iterator:CrateLoop<CAIXAS_MAXIMAS>,
- /*Con-MySQL*/
- mysql,
- /*Matrizes*/
- CurrentCrate[MAX_PLAYERS],
- bool:HasBox[MAX_PLAYERS];
- /*Dialogo*/
- #define DIALOG_CRATE (0)
- #define DIALOG_RCON (1)
- #define DIALOG_CRTGO (2)
- #define DIALOG_CRTET (3)
- public OnFilterScriptInit()
- {
- print("\n--------------------------------------");
- print("Caixas de Armas - Carregado");
- print("--------------------------------------\n");
- mysql_log(LOG_ERROR | LOG_WARNING | LOG_DEBUG);
- mysql = mysql_connect(MYSQL_HOST, MYSQL_USUARIO, MYSQL_BDADOS, MYSQL_SENHA);
- if(mysql_errno(mysql) != 0)
- {
- print("Não foi possível conectar ao banco de dados!"); SendRconCommand("hostname MySQL | ERRO");
- }
- else
- {
- printf("MySQL: Conectado ao banco de dados (%s)",MYSQL_BDADOS);
- }
- if(!mysql_tquery(mysql, "SELECT * FROM `crates`", "LoadCrates", ""))
- {
- printf("MySQL: Não foi possível carregar nenhuma caixa.");
- }
- return 1;
- }
- public OnFilterScriptExit()
- {
- SaveCrates();
- return 1;
- }
- /*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),"Caixa de Armas (%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 = "Vazio";
- }
- else
- {
- GetWeaponName(weapid, weapname, sizeof(weapname));
- switch(slot)
- {
- case 0: format(weapname,sizeof(weapname),"%s - Balas: %i",weapname,cInfo[CurrentCrate[playerid]][Ammo1]);
- case 1: format(weapname,sizeof(weapname),"%s - Balas: %i",weapname,cInfo[CurrentCrate[playerid]][Ammo2]);
- case 2: format(weapname,sizeof(weapname),"%s - Balas: %i",weapname,cInfo[CurrentCrate[playerid]][Ammo3]);
- }
- }
- return weapname;
- }
- stock SaveCrates() //Keyword stock por que acusa a função de não ser usada, mesmo sendo.
- {
- new count;
- foreach(new i: CrateLoop)
- {
- UpdateCrates(i);
- count++;
- }
- printf("\n=======================================\n");
- printf(" Caixas salvas!\n");
- printf(" Um total de %i Caixas de %i foram salvas\n", count, CAIXAS_MAXIMAS);
- printf("\n=======================================\n");
- }
- stock UpdateCrates(i) //Keyword stock por que acusa a função de não ser usada, mesmo sendo.
- {
- 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),"Caixa de Armas (%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:comprarcaixa(playerid)
- {
- if(GetPlayerMoney(playerid) < CAIXAS_CUSTO) return SendClientMessage(playerid,-1,"Você precisa de $10,000 para comprar uma caixa.");
- new Float:X,Float:Y,Float:Z;
- GetPlayerPos(playerid,X,Y,Z);
- GivePlayerMoney(playerid,-CAIXAS_CUSTO);
- CreateCrate(X,Y,Z,GetPlayerVirtualWorld(playerid),GetPlayerInterior(playerid));
- return 1;
- }
- CMD:caixa(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}Você não está próximo de nenhuma caixa de armas.");
- new string[119];
- format(string,sizeof(string),"%s» %s\n» %s\n» %s\n{FF0000}» Colocar arma\n{FF0000}» Pegar caixa",
- 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, "Caixa de armas",string, "Selecionar", "Cancelar");
- return 1;
- }
- CMD:ctest222(playerid)
- {
- if(IsPlayerAdmin(playerid))
- {
- GivePlayerWeapon(playerid,24,100);
- }
- return 1;
- }
- CMD:cmenu(playerid)
- {
- if(IsPlayerAdmin(playerid))
- {
- new count,string[143];
- foreach(new c: CrateLoop)
- {
- count++;
- }
- format(string,sizeof(string),"%s» Remover caixas {FF0000}(%i)\n{FFFFFF}» Remover caixa próxima\n» Resetar caixa próxima\n» Criar caixa\n» Ir para caixa\n» Editar pos da caixa",string,count);
- ShowPlayerDialog(playerid, DIALOG_RCON, DIALOG_STYLE_LIST, "Caixas de armas (Admin)",string, "Selecionar", "Cancelar");
- }
- return 1;
- }
- /*Callbacks*/
- public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
- {
- switch(dialogid)
- {
- case DIALOG_CRATE:
- {
- if(response)
- {
- switch(listitem)
- {
- case 0:
- {
- if(cInfo[CurrentCrate[playerid]][Weapon1] == -1)
- {
- SendClientMessage(playerid,-1,"{FFFF00}[!] {FFFFFF}Slot vazia.");
- }
- 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}Slot vazia.");
- }
- 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}Slot vazia.");
- }
- 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}Caixa cheia, nenhuma outra arma pode ser colocada dentro.");
- }
- else
- {
- if(GetPlayerWeapon(playerid) == 0) return SendClientMessage(playerid,-1,"{FFFF00}[!] {FFFFFF}Você não tem armas em mãos.");
- 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);
- 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;
- }
- }
- }
- }
- case DIALOG_RCON:
- {
- if(response)
- {
- switch(listitem)
- {
- case 0:
- {
- foreach(new i: CrateLoop)
- {
- new query[41];
- DestroyDynamicObject(cInfo[i][CrateID]);
- Delete3DTextLabel(cInfo[i][Label]);
- mysql_format(mysql,query,sizeof(query),"DELETE FROM `crates` WHERE `ID` ='%i'",i);
- mysql_tquery(mysql,query,"","");
- Iter_SafeRemove(CrateLoop, i, i);
- }
- SendClientMessageToAll(-1,"{FFFF00}[!] {FFFFFF} Todas as caixas foram removidas por um(a) administrador(a).");
- }
- 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}Você não está próximo de nenhuma caixa de armas.");
- 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}Você não está próximo de nenhuma caixa de armas.");
- 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, "Caixas »{FFFFFF} Ir para caixa", "O ID da caixa vai abaixo:", "Ir", "Cancelar");
- }
- case 5:
- {
- ShowPlayerDialog(playerid,DIALOG_CRTET, DIALOG_STYLE_INPUT, "Caixas »{FFFFFF} Editar pos da caixa", "O ID da caixa vai abaixo:", "Confirmar", "Cancelar");
- }
- }
- }
- }
- case DIALOG_CRTGO:
- {
- if(response)
- {
- if (!Iter_Contains(CrateLoop, strval(inputtext))) return SendClientMessage(playerid,-1,"{FFFF00}[!] {FFFFFF} ID inválido.");
- SetPlayerPos(playerid,cInfo[strval(inputtext)][cX],cInfo[strval(inputtext)][cY],cInfo[strval(inputtext)][cZ]+1);
- }
- }
- case DIALOG_CRTET:
- {
- if(response)
- {
- if (!Iter_Contains(CrateLoop, strval(inputtext))) return SendClientMessage(playerid,-1,"{FFFF00}[!] {FFFFFF} ID inválido.");
- 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),"Caixa de Armas (%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} Nova posição salva.");
- }
- 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)
- {
- ApplyAnimation(playerid,"CARRY","null",0.0,0,0,0,0,0); //Pré-Carregar livraria de animação.
- 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),"Caixa de Armas (%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(" Caixas carregadas!\n");
- printf(" Um total de %d caixas de %d foram carregadas\n", cache_get_row_count(), CAIXAS_MAXIMAS);
- printf("\n=======================================\n");
- }
- public OnPlayerDisconnect(playerid,reason)
- {
- if(HasBox[playerid] == true)
- {
- DropCrate(playerid);
- HasBox[playerid] = false;
- }
- CurrentCrate[playerid] = -1;
- }
- 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
Advertisement