11.03.2015, 08:05
Код:
#include <a_samp> #include mxINI new WeaponNames[47][] = { "Unarmed","Brass Knuckless","Golf Club","Night Stick","Knife","Basketball Bat","Shovel","Pool Cue", "Katana","Chainsaw","Purple Dildo","White Dildo","Long White Dildo","White Dildo 2","Flowers","Cane", "Grenades","Tear Gas","Molotovs","Missle1","Missle2","Missle3","Pistol","Silenced Pistol","Desert Eagle","Shotgun", "Sawn Off Shotgun","Combat Shotgun","Micro UZI","MP5","AK-47","M4","Tec9","Rifle","Sniper Rifle","RPG", "Rocket Launcher","Flame Thrower","Minigun","Sachet Chargers","Detonator","Spry Paint","Fire Extinguer", "Camera","Nightvision Goggles","Thermal Goggles","Parachute"}; #define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1 #define MAX_ITEMS 60 #define MAX_PLAYER_ITEM 20 new item[MAX_PLAYERS][MAX_ITEMS]; new used[MAX_PLAYERS]; new np[MAX_PLAYERS][MAX_ITEMS]; new npname[MAX_ITEMS][100]; new ida[MAX_ITEMS]; new loading[MAX_ITEMS]; main() { print("\n----------------------------------"); print(" Dynamic Inventory system by Seregamil"); print("----------------------------------\n"); } public OnGameModeInit() { for(new i;i!=47;i++) format(npname[i],100,"%s",WeaponNames[i])/*,printf("NAME: %s | ID: %d",WeaponNames[i],i)*/; return 1; } addItem(playerid,id,name[],value) { if(GetPVarInt(playerid,name) != 0) SetPVarInt(playerid,name,GetPVarInt(playerid,name)+value); else SetPVarInt(playerid,name,value); new str[128]; format(str,128,"{a3ff00}%s {ffffff}have been updated in the inventory. {a3ff00}[%d]",name,GetPVarInt(playerid,name)); SendClientMessage(playerid,-1,str); item[playerid][id]+=value; used[playerid]++; np[playerid][id] = GetPVarInt(playerid,name); } removeItem(playerid,name[],id) { SetPVarInt(playerid,name,0); new str[128]; format(str,128,"{a3ff00}%s{ffffff} were removed from the inventory",npname[id]); SendClientMessage(playerid,-1,str); item[playerid][id]=0; used[playerid]--; np[playerid][id] = 0; } infoAllItem(playerid) { new str[300]; for(new q;q!=MAX_ITEMS;q++) ida[q]=0; for(new i;i!=MAX_ITEMS;i++) { if(item[playerid][i]!=0) { format(str,sizeof(str),"{ffffff}%s%s | {a3ff00}%d\n",str, npname[i],np[playerid][i]); ida[i] = 1; } } ShowPlayerDialog(playerid,15,DIALOG_STYLE_LIST," ",str,"Okay",""); return 1; } funcItem(playerid,id) { new name[24]; GetPlayerName(playerid,name,24); new str1[100]; format(str1,100,"{a3ff00}]%s[ {ffffff}subject {a3ff00}[%s {ffffff}| {a3ff00}%d]",name,npname[id],np[playerid][id]); ShowPlayerDialog(playerid,22,DIALOG_STYLE_LIST,str1,"Use\nSend\nDrop","Выбор","Отмена"); SetPVarInt(playerid,"Clicked",id); } public OnPlayerConnect(playerid) { for(new x;x!=MAX_ITEMS;x++) item[playerid][x] = 0,np[playerid][x] = 0; used[playerid] = 0; loadInt(playerid); return 1; } loadInt(playerid) { for(new q;q!=MAX_ITEMS;q++) loading[q] = 0; new name[24]; GetPlayerName(playerid,name,24); new str[100]; format(str,100,"inventory/%s.ini",name); if(!fexist(str)) { new file = ini_createFile(str); if(file<0) ini_openFile(str); for(new x;x!=MAX_ITEMS;x++) { new str2[100]; format(str2,100,"Inv%d",x); ini_setInteger(playerid,str2,0); } ini_closeFile(file); } else { new file = ini_openFile(str); for(new x;x!=MAX_ITEMS;x++) { new str2[100]; format(str2,100,"Inv%d",x); ini_getInteger(playerid,str2,loading[x]); if(loading[x] != 0) addItem(playerid,x,npname[x],loading[x]); } ini_closeFile(file); } } public OnPlayerDisconnect(playerid, reason) { saveInt(playerid); for(new x;x!=MAX_ITEMS;x++) item[playerid][x] = 0,np[playerid][x] = 0; used[playerid] = 0; return 1; } saveInt(playerid) { new name[24]; GetPlayerName(playerid,name,24); new str[100]; format(str,100,"inventory/%s.ini",name); if(fexist(str)) { new file = ini_openFile(str); for(new x;x!=MAX_ITEMS;x++) { new str2[100]; format(str2,100,"Inv%d",x); ini_setInteger(playerid,str2,item[playerid][x]); removeItem(playerid,npname[x],x); } ini_closeFile(file); } } public OnPlayerCommandText(playerid, cmdtext[]) { dcmd(add,3,cmdtext); dcmd(info,4,cmdtext); return 0; } dcmd_add(playerid,params[]) { #pragma unused params if(used[playerid] == MAX_PLAYER_ITEM) return SendClientMessage(playerid,-1,"MAX"); if(GetPlayerWeapon(playerid)!=0) addItem(playerid,GetPlayerWeapon(playerid),WeaponNames[GetPlayerWeapon(playerid)],GetPlayerAmmo(playerid)); RemovePlayerWeapon(playerid, GetPlayerWeapon(playerid)); return 1; } RemovePlayerWeapon(playerid, weaponid) { if(!IsPlayerConnected(playerid) || weaponid < 0 || weaponid > 50) return; new saveweapon[13], saveammo[13]; for(new slot = 0; slot < 13; slot++) GetPlayerWeaponData(playerid, slot, saveweapon[slot], saveammo[slot]); ResetPlayerWeapons(playerid); for(new slot; slot < 13; slot++) { if(saveweapon[slot] == weaponid || saveammo[slot] == 0) continue; GivePlayerWeapon(playerid, saveweapon[slot], saveammo[slot]); } GivePlayerWeapon(playerid, 0, 1); } dcmd_info(playerid,params[]) { #pragma unused params infoAllItem(playerid); return 1; } public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { if(dialogid == 15) { if(response) { new listid = 0; for(new i;i!=MAX_ITEMS;i++) { if(ida[i] == 1) { if(item[playerid][i] != 0) { if(listitem!=listid) listid++; else { funcItem(playerid,i); for(new x;x!=MAX_ITEMS;x++) ida[x]=0; break; } } } } return true; } } if(dialogid == 22) { if(!response) return infoAllItem(playerid); if(response) { if(listitem == 0) { if(switchItem(GetPVarInt(playerid,"Clicked")) == 0) { GivePlayerWeapon(playerid,GetPVarInt(playerid,"Clicked"),item[playerid][GetPVarInt(playerid,"Clicked")]); removeItem(playerid,npname[GetPVarInt(playerid,"Clicked")],GetPVarInt(playerid,"Clicked")); SendClientMessage(playerid,-1,"You started using object"); } } if(listitem == 1) ShowPlayerDialog(playerid,23,DIALOG_STYLE_INPUT," ","Enter the ID of the player you want to send this item","Ок","Назад"); if(listitem == 2) removeItem(playerid,npname[GetPVarInt(playerid,"Clicked")],GetPVarInt(playerid,"Clicked")); } return true; } if(dialogid == 23) { if(!response) return infoAllItem(playerid); if(response) { new id = strval(inputtext); if(!IsPlayerConnected(id)) return SendClientMessage(playerid,-1,"INVALID_PLAYERID"); if(id == playerid) return SendClientMessage(playerid,-1,"This is you"); if(used[id] == MAX_PLAYER_ITEM) return SendClientMessage(playerid,-1,"This player is full inventory"); addItem(id,GetPVarInt(playerid,"Clicked"),npname[GetPVarInt(playerid,"Clicked")],np[playerid][GetPVarInt(playerid,"Clicked")]); new str[256],name[24]; GetPlayerName(playerid,name,24); format(str,256,"{ffffff}Player {a3ff00}%s {ffffff}gave you the subject {a3ff00}%s [%d]",name,npname[GetPVarInt(playerid,"Clicked")],np[playerid][GetPVarInt(playerid,"Clicked")]); ShowPlayerDialog(id,24,DIALOG_STYLE_MSGBOX," ",str,"Ок",""); removeItem(playerid,npname[GetPVarInt(playerid,"Clicked")],GetPVarInt(playerid,"Clicked")); } return true; } return 1; } switchItem(id) { #define WEAPON_ITEM 0 switch(id) { case 0..46: return WEAPON_ITEM; } return -1; }