GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => A témát indította: Sramm - 2014. Május 10. - 16:53:35

Cím: Sramm\'s Inventory System v. 5.0 (Új verzió)
Írta: Sramm - 2014. Május 10. - 16:53:35
Sramm\'s Inventory System 5.0
 


 

 
Bevezetõ
Az alábbi filterscript azért jött létre, mert az RPG módomhoz kerestem egy Inventory(Hátizsák) rendszert, de sajnos nem találtam olyat, ami megfelelõ lett volna, ezért kénytelen voltam én írni egyet.
Fejlesztési napló:
v. 5.0
- Apróbb bugjavítások
- Az egyik változó neve akadt más incekkel, ez javítva.
- A kategória nélküli 3.0 verzió frissítve lett, már abban is eldobhatjuk, vagy átadhatjuk tárgyainkat.
- Választható rendszerek (kategóriás legyen-e, vagy ne.)
- Új fajta felépítés
v. 4.1
- ID elírás javítva
- Tárgy eldobás javítva. (csak egyet lehetett eldobni)
v. 4.0
- Új alapkövek: Kategóriák hozzáadása a játékhoz
- Új, játékos funkciók: Használat,eldobás,átadás.
- Új kinézet
- Frissített tesztfilterszkript hozzáadva
v. 3.0
- Más játékosokkal való lehetõségek hozzáadása
- Apróbb bugjavítások
- Tesztfilterszkript frissítés
v. 2.0
- Az elsõ verzió teljes cserélése és bugtalanítása.
v. 1.0
- Elsõ kiadott verzió
Függvények (Amennyiben nem használsz kategóriát, a cat[] részeket hagyd ki.)
AddItem(playerid,item[],amount,cat[])


Hozzáad a táskához egy tárgyat.
Paraméterek:

playerid - A játékos, akinek a táskájához hozzá akarsz adni valamit.
item[] - A tárgy neve, amit hozzá akarsz adni.
amount - Amennyi tárgyat akarsz hozzáadni.
cat[] - Amelyik kategóriába be szeretnéd helyezni.
Példa:

CMD:givememedikit(playerid) //Amikor beírja a parancsot
{
AddItem(playerid,\"Medikit\",1,\"Orvosságok\"); //Adunk neki egy darab \"Medikit\" nevû tárgyat az \"Orvosságok\" kategóriába
return 1;
}

Megjegyzés: Ez mindig csak hozzáad tárgyat, nem megváltoztatja. Azaz, ha van már 1 tárgyad, és te 5-t írsz a darabszámhoz, akkor 6 tárgya lesz, és nem 5.
RemoveItem(playerid,item[],amount,cat[])


Elvesz a táskából egy tárgyat.
Paraméterek:

playerid - A játékos, akinek a táskájából el akarsz venni valamit.
item[] - A tárgy neve, amit el akarsz venni.
amount - Amennyi tárgyat el akarsz venni.
cat[] - Amelyik kategóriából törölni szeretnéd.
Példa:

CMD:removememedikit(playerid) //Amikor beírja a parancsot
{
RemoveItem(playerid,\"Medikit\",1,\"Orvosságok\"); //Elveszünk egy darab \"Medikit\" nevû tárgyat az \"Orvosságok\" kategóriából
return 1;
}

ShowItems(playerid)


Megmutatja a táska tartalmát.
Paraméterek:

playerid - A játékos, akinek megmutatjuk táskát.
Példa:

CMD:hatizsakom(playerid) //Amikor beírja a parancsot
{
ShowItems(playerid); //Megmutatjuk neki a táskáját.
return 1;
}

ShowItemsEx(playerid,id,bool:type)


Megmutatja a táska tartalmát egy másik játékosnak.
Paraméterek:

playerid - A játékos, akié a táska.
id - A játékos, akinek megmutatjuk a táskát.
type - true, ha elveheti a tárgyat, false, ha nem
Példa:

CMD:getinv(playerid,params[])
{
new id,type;
    if(sscanf(params,\"ui\",id,type)) return SendClientMessage(playerid,-1,\"Használat: /getinv [id/név] [Típus] (Ha a típus 0, nem veheti el tõle a tárgyat, ha 1 igen)\");
    if(type != 0 && type != 1) return 1;
if(type == 0) ShowItemsEx(id,playerid,false);
else ShowItemsEx(id,playerid,true);
return 1;
}

GetItemSlot(playerid,item[],cat[])


Lekéri, hogy melyik helyen van egy tárgy.
Paraméterek:

playerid - A játékos, akinek a táskájából lekéri.
item[] - A tárgy neve, amit le akarunk kérni.
cat[] - Melyik kategóriában van a tárgy
Példa:

CMD:holamedikit(playerid) //Amikor beírja a parancsot
{
new msg[128];
format(msg,128,\"A Medikit ezen a helyen van: \'%d\'\",GetItemSlot(playerid,\"Medikit\",\"Orvosságok\"));
SendClientMessage(playerid,-1,msg);
return 1;
}

SaveItems(playerid)


Lementi egy játékos hátizsákját.
Paraméterek:

playerid - A játékos, akinek lementjük.
Példa:

CMD:saveinv(playerid) //Amikor beírja a parancsot
{
SaveItems(playerid);
return 1;
}

LoadItems(playerid)


Betölti egy játékos hátizsákját.
Paraméterek:

playerid - A játékos, akinek betöltjük.
Példa:

CMD:loadinv(playerid) //Amikor beírja a parancsot
{
LoadItems(playerid);
return 1;
}

OnItemResponse(playerid,response,listitem,inputtext[])


Lementi egy játékos hátizsákját.
Paraméterek:

playerid - A játékos, aki a dialogot megnyomja.
response - Ha a jó gombot nyomja.
listitem - Melyikre nyom.
inputtext[] - A tárgy neve.
FONTOS:
Az alábbi kódot muszáj ide raknod, hogy ki tudd választani a tárgyat.

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
      OnItemResponse(playerid,dialogid,response,listitem,inputtext);
      return 0;
}

GetItemAmount(playerid,item[],cat[])


Lekéri, hogy mennyi van az adott tárgyból.
Paraméterek:

playerid - A játékos, akinek a táskájából lekéri.
item[] - A tárgy neve, aminek a darabszámát le akarjuk kérni.
cat[] - Melyik kategóriában van a tárgy.
Példa:

CMD:mennyimedikitemvan(playerid) //Amikor beírja a parancsot
{
new msg[128];
format(msg,128,\"Ennyi Medikited van: \'%d\'\",GetItemAmount(playerid,\"Medikit\",\"Orvosságok\"));
SendClientMessage(playerid,-1,msg);
return 1;
}

IsPlayerOwnItem(playerid,item[])


Lekéri, hogy a játékosnál van-e ilyen item.
Paraméterek:

playerid - A játékos, akinek a táskájából lekéri.
item[] - A tárgy neve, amit le akarunk kérni.
Példa:

CMD:vanemedikit(playerid) //Amikor beírja a parancsot
{
if(IsPlayerOwnItem(playerid,\"Medikit\")) return SendClientMessage(playerid,-1,\"Van nálad medikit.\");
else if(!IsPlayerOwnItem(playerid,\"Medikit\")) return SendClientMessage(playerid,-1,\"Nincs nálad medikit.\");
return 1;
}

GetItemName(playerid,slot)


Lekéri a sloton lévõ tárgy nevét.
Paraméterek:

playerid - A játékos, akinek lekérjük.
slot - Aminek a nevét lekérjük.
Példa:

CMD:getname(playerid) //Amikor beírja a parancsot
{
new msg[128];
format(msg,128,\"Slot 1-en lévõ tárgy neve: \'%s\'\",GetItemName(playerid,1));
SendClientMessage(playerid,-1,msg);
        return 1;
}

GetItemCategory(playerid,slot)


Lekéri a sloton lévõ tárgy kategóriáját.
Paraméterek:

playerid - A játékos, akinek lekérjük.
slot - Aminek a nevét lekérjük.
Példa:

CMD:getcat(playerid) //Amikor beírja a parancsot
{
new msg[128];
format(msg,128,\"Slot 1-en lévõ tárgy kategóriája: \'%s\'\",GetItemCategory(playerid,1));
SendClientMessage(playerid,-1,msg);
        return 1;
}

ResetPlayerItems(playerid)


Nullázza az játékos összes tárgyát.
Paraméterek:

playerid - A játékos, akinek nullázni szeretnénk.
Példa:

CMD:resetitem(playerid) //Amikor beírja a parancsot
{
ResetPlayerItems(playerid);
return 1;
}

Eljárások
public OnPlayerUseItem(playerid,item[])


Akkor hívódik meg, amikor egy játékos rákattint egy tárgyra a hátiszáknál, ami a ShowItems(playerid)-nél hívódik meg.

Paraméterek:

playerid - A játékos, aki rányomott.
item[] - Annak a tárgynak a neve, amelyikre rányomott.
Példa:
Ha pl. én adok valakinek egy Medikit-et:

AddItem(playerid,\"Medikit\",1); //Megadom a \"Medikit\" nevû tárgyat a játékosnak

És utána õ rákattint:
public OnPlayerUseItem(playerid,item[])
{
if(CompareEx(item,\"Medikit\")) //Tehát ha egyezik annak a tárgynak a neve, amire rákattintottam a \"Medikit\"-tel... (Az inc tartalmazza a CompareEx-et)
{
    SetPlayerHealth(playerid,100); //Beállítjuk a játékos életét 100-ra
    RemoveItem(playerid,\"Medikit\",1); //És elvesszük tõle, mert ugye már használta.
    return 1;
}
return 1;
}

Megjegyzés: Ha olyan tárgyat adsz neki, amit aztán itt nem kezelsz, arra hiába kattint rá, nem fog történni semmi.
public OnPlayerUseItemEx(playerid,fromplayerid,item[])


Akkor hívódik meg, amikor egy játékos rákattint egy tárgyra egy másik játékos táskájában, ami a ShowItemsEx()-nél hívódik meg.

Paraméterek:

playerid - A játékos, aki rányomott.
fromplayerid - A játékos, akinek a táskájában túrkált.
item[] - Annak a tárgynak a neve, amelyikre rányomott.
Példa:
public OnPlayerUseItemEx(playerid,fromplayerid,item[])
{
new amount = GetItemAmount(fromplayerid,item);
        RemoveItem(fromplayerid,item,amount); //elvesszük az elõzõ tulajtól
AddItem(playerid,item,amount); //odaadjuk az újnak
return 1;
}

Fontos:
1. Az alábbi kódot muszáj ide raknod, hogy ki tudd választani a tárgyakat.

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
      OnItemResponse(playerid,dialogid,response);
      return 0;
}

2. Létre kell hoznod egy \"Inv\" mappát, hogy tudja mibe menteni a rendszer a dolgokat.
3. Az 5.0-ás verziótól kezdve az #include <inventory> elé be kell raknod, hogy
szeretnél-e használni kategóriákat, vagy sem.
Tehát így kell kinéznie:
#define INVENTORY_WITH_CATEGORY 1 // Ha 1, akkor lesznek kategóriák, ha 0, akkor nem
#include <inventory>

Megjegyzések
Ha növeled a maximum tárgyakat, minden játékost, akinek elõtte kevesebb volt szinkronizálnod kell, különben kifagyhat a szerver!
Ha bugot találsz, vagy ötleted van a témában elküldheted. :)
Külön köszönet
F0rian - Compare
Videó, képanyag
v. 2.0, v. 3.0 -

v. 4.1 -

Letöltés
v. 5.0 (Ajánlott)
srinv5.0.rar (Inventory pack)
v. 4.1
inventory.rar (Include+Inv mappa tesztfájllal+Teszt filterscript) |
v. 3.0
inventory.rar (Include+Inv mappa tesztfájllal+Teszt filterscript) | inventory.inc
v. 2.0
inventory.rar (Include+Inv mappa tesztfájllal+Teszt filterscript) | inventory.inc
Kód: (v. 4.1)



/*
/*
         Sramm\'s Inventory System
& Készítette: Sramm
& Utoljára frissítve: 2014.05.11
& Veziószám: 4.1
(c) Sramm 2013-2014
*/
#include <dini>
#if defined _INC_inventory
#endinput
#endif
#define _INC_inventory
#define SFMC(%0,%1,%2) do{new _str[128]; format(_str,128,%2); SendClientMessage(%0,%1,_str);}while(INVFALSE)
#define MAX_ITEMS 100
#define MAX_DROP_ITEMS 200
#define ITEM_DIALOG 5842
#define ITEM_DIALOG_EX ITEM_DIALOG+10
#define ITEM_DIALOG_CAT ITEM_DIALOG_EX+10
#define ITEM_DIALOG_ULTRA ITEM_DIALOG_CAT+10
 
/*
native AddItem(playerid,item[],amount,cat[]);
native RemoveItem(playerid,item[],amount,cat[]);
native ShowItems(playerid);
native ShowItemsEx(playerid,id);
native ShowRealItems(playerid,cat[]);
native GetItemSlot(playerid,item[],cat[]);
native SaveItems(playerid);
native LoadItems(playerid);
native OnItemResponse(playerid,response,listitem,inputtext[]);
native GetItemAmount(playerid,item[],cat[]);
native IsPlayerOwnItem(playerid,item[]);
native ResetPlayerItems(playerid);
native GetItemName(playerid,itemslot);
native GetItemCategory(playerid,itemslot);
*/
new INVFALSE = false;
new ItemName[MAX_PLAYERS][MAX_ITEMS][36];
new ItemCat[MAX_PLAYERS][MAX_ITEMS][36];
new ItemAmount[MAX_PLAYERS][MAX_ITEMS];
new ItemID[MAX_PLAYERS];
new listItem[MAX_ITEMS];
new ItemPlayer[MAX_PLAYERS] = INVALID_PLAYER_ID;
new ItemPlayerID[MAX_PLAYERS];
enum ditInfo
{
Text3D:ittext,
Float:posX,
Float:posY,
Float:posZ,
VW,
INV,
itname[36],
itcat[36],
itamount,
itobject
};
new DropItemInfo[MAX_ITEMS][ditInfo];
forward OnPlayerUseItem(playerid,item[]);
forward OnPlayerUseItemEx(playerid,fromplayerid,item[]);
stock RemoveHexColorFromString(string[])
{
    new
        pos[2];
    pos[0] = strfind(string,\"{\",true,0);
pos[1] = strfind(string,\"}\",true,0);
for(new i;i < strlen(string); i++)
{
    if(pos[0]+7 == pos[1])
    {
        strdel(string, pos[0], pos[1]+1);
        pos[0] = strfind(string,\"{\",true,0);
   pos[1] = strfind(string,\"}\",true,0);
}
}
return 1;
}
stock GetNamei(playerid)
{
new n[MAX_PLAYER_NAME];
GetPlayerName(playerid,n,sizeof(n));
return n;
}
 
stock CompareEx(comp[], with[]) //By: Fl0rian
{
new LenghtComp = strlen(comp);
new LenghtWith = strlen(with);
new Character;
if( LenghtComp != LenghtWith ) return false;
for( new i = 0; i < LenghtComp; i++ )
{
    if( comp == with )
    {
        Character++;
}
}
if( LenghtComp == Character ) return true;
return false;
}
stock DropItem(playerid,id,amount)
{
for(new i; i<MAX_DROP_ITEMS; i++)
{
   if(!IsValidObject(DropItemInfo[itobject]))
   {
      new Float:Xp,Float:Yp,Float:Zp;
      GetPlayerPos(playerid, Xp, Yp, Zp);
      DropItemInfo[itobject] = CreateObject(1210, Xp, Yp, Zp-1, 0.0, 0.0, 0.0);
      DropItemInfo[ittext] = Create3DTextLabel(ItemName[playerid][id], -1, Xp,Yp,Zp, 10.0,GetPlayerVirtualWorld(playerid),1);
      DropItemInfo[posX] = Xp;
      DropItemInfo[posY] = Yp;
      DropItemInfo[posZ] = Zp;
      DropItemInfo[VW] = GetPlayerVirtualWorld(playerid);
      DropItemInfo[iNV] = GetPlayerInterior(playerid);
      format(DropItemInfo[itname],36,ItemName[playerid][id]);
      format(DropItemInfo[itcat],36,ItemCat[playerid][id]);
      DropItemInfo[itamount] = amount;
      RemoveItem(playerid,ItemName[playerid][id],amount,ItemCat[playerid][id]);
      return 1;
   }
}
return 1;
}
stock PickUpItem(playerid)
{
    for(new i; i<MAX_DROP_ITEMS; i++)
    {
if(IsPlayerInRangeOfPoint(playerid,3.0,DropItemInfo[posX],DropItemInfo[posY],DropItemInfo[posZ]) && GetPlayerVirtualWorld(playerid) == DropItemInfo[VW] && GetPlayerInterior(playerid) == DropItemInfo[iNV])
{
   new sucess = AddItem(playerid,DropItemInfo[itname],DropItemInfo[itamount],DropItemInfo[itcat]);
   if(sucess)
   {
       Delete3DTextLabel(DropItemInfo[ittext]);
       DestroyObject(DropItemInfo[itobject]);
       return 1;
    }
}
}
return 1;
}
stock AddItem(playerid,item[],amount,category[] = \"Egyéb\")
{
if(amount <= 0) return 0;
if(strlen(item) > 128) return 0;
new bool: count[2] = false;
for(new i; i<MAX_ITEMS; i++)
{
    if(CompareEx(ItemName[playerid],item) && CompareEx(ItemCat[playerid],category))
    {
   count[0] = true;
        ItemAmount[playerid] += amount;
        return 1;
}
}
if(count[0] == false)
{
    for(new i; i<MAX_ITEMS; i++)
{
    if(CompareEx(ItemName[playerid],\"Üres\"))
    {
      count[1] = true;
      format(ItemName[playerid],36,\"%s\",item);
      format(ItemCat[playerid],36,\"%s\",category);
        ItemAmount[playerid] = amount;
        return 1;
   }
}
}
if(count[1] != true) return SendClientMessage(playerid,-1,\"Betelt a tárhelyed, üríts belõle.\"),0;
return 1;
}
stock RemoveItemEx(playerid,i)
{
format(ItemName[playerid],36,\"%s\",\"Üres\");
format(ItemCat[playerid],36,\"%s\",\"Üres\");
ItemAmount[playerid] = 0;
return 1;
}
stock RemoveItem(playerid,item[],amount,category[])
{
    for(new i; i<MAX_ITEMS; i++)
{
        if(CompareEx(ItemName[playerid],item) && CompareEx(ItemCat[playerid],category))
{
    if(ItemAmount[playerid] > amount)
    {
        ItemAmount[playerid] -= amount;
   }
   else if(ItemAmount[playerid] == amount || ItemAmount[playerid] < amount)
   {
      format(ItemName[playerid],36,\"%s\",\"Üres\");
      format(ItemCat[playerid],36,\"%s\",\"Üres\");
      ItemAmount[playerid] = 0;
   }
   return 1;
}
}
return 1;
}
stock ShowItems(playerid)
{
new msg[128],dialogstr[3000],bool:c;
for(new i; i<MAX_ITEMS; i++)
{
    if(!CompareEx(ItemCat[playerid],\"Üres\"))
    {
        c = true;
   format(msg,128,\"\\n%s\",ItemCat[playerid]);
   if(strfind(dialogstr, msg, true) == -1)
   {
      strcat(dialogstr,msg);
   }
}
}
if(c != false)
{
ShowPlayerDialog(playerid,ITEM_DIALOG_CAT,DIALOG_STYLE_LIST,\"Táska tartalma\",dialogstr,\"Választ\",\"Mégsem\");
}
else SendClientMessage( playerid, -1, \"Itt nincs semmi.\" );
return 1;
}
 
stock ShowRealItems(playerid,cat[])
{
new msg[128],dialogstr[3000],bool:c,count=-1;
for(new i; i<MAX_ITEMS; i++)
{
    if(!CompareEx(ItemName[playerid],\"Üres\") && CompareEx(ItemCat[playerid],cat))
    {
        c = true;
        count++;
   format(msg,128,\"\\n[%ddb] %s\",ItemAmount[playerid],ItemName[playerid]);
   strcat(dialogstr,msg);
   listItem[count] = i;
}
}
if(c != false) ShowPlayerDialog(playerid,ITEM_DIALOG,DIALOG_STYLE_LIST,\"Táska tartalma\",dialogstr,\"Választ\",\"Mégsem\");
else SendClientMessage( playerid, -1, \"Itt nincs semmi.\" );
return 1;
}
 
stock ShowItemsEx(playerid,id,bool:use = false)
{
new msg[128],dialogstr[3000],bool:c;
for(new i; i<MAX_ITEMS; i++)
{
    if(!CompareEx(ItemName[playerid],\"Üres\"))
    {
        c = true;
   format(msg,128,\"\\n[%d] %s\",ItemAmount[playerid],ItemName[playerid]);
   strcat(dialogstr,msg);
}
}
if(use == false)
{
if(c != false) ShowPlayerDialog(id,ITEM_DIALOG_EX,DIALOG_STYLE_LIST,\"Tárhely\",dialogstr,\"\",\"Oké\");
else SendClientMessage( id, -1, \"Nincs semmi a táskájában.\" );
}
else
{
    ItemPlayer[id] = playerid;
if(c != false) ShowPlayerDialog(id,ITEM_DIALOG_EX+1,DIALOG_STYLE_LIST,\"Tárhely\",dialogstr,\"\",\"Oké\");
else SendClientMessage( id, -1, \"Nincs semmi a táskájában.\" );
}
return 1;
}
 
stock GetItemSlot(playerid,item[],cat[])
{
    for(new i; i<MAX_ITEMS; i++)
    {
        if(CompareEx(ItemName[playerid],item) && CompareEx(ItemCat[playerid],cat)) return i;
}
return -1;
}
stock IsPlayerOwnItem(playerid,item[])
{
    for(new i; i<MAX_ITEMS; i++)
    {
        if(CompareEx(ItemName[playerid],item)) return 1;
}
return 0;
}
stock GetItemAmount(playerid,item[],cat[])
{
    for(new i; i<MAX_ITEMS; i++)
    {
        if(CompareEx(ItemName[playerid],item) && CompareEx(ItemCat[playerid],cat)) return ItemAmount[playerid];
}
return -1;
}
stock GetItemName(playerid,itemslot) return ItemName[playerid][itemslot];
stock GetItemCategory(playerid,itemslot) return ItemCat[playerid][itemslot];
stock ResetPlayerItems(playerid)
{
for(new i; i<MAX_ITEMS; i++)
{
    format(ItemName[playerid],36,\"%s\",\"Üres\");
    format(ItemCat[playerid],36,\"%s\",\"Üres\");
ItemAmount[playerid] = 0;
}
return 1;
}
stock OnItemResponse(playerid, dialogid, response,listitem, inputtext[])
{
    if(dialogid == ITEM_DIALOG_CAT)
    {
        if(!response) return 1;
ShowRealItems(playerid,inputtext);
return 1;
}
if(dialogid == ITEM_DIALOG)
    {
       if(!response) return 1;
       ShowPlayerDialog(playerid,ITEM_DIALOG_ULTRA+1,DIALOG_STYLE_LIST,\"Mi legyen vele?\",\"Használat\\nEldobás\\nÁtadás\",\"Oké\",\"Mégsem\");
       ItemID[playerid] = listItem[listitem];
}
if(dialogid == ITEM_DIALOG_EX)
    {
       if(!response) return 1;
if(listitem != 0) return SendClientMessage(playerid,-1,\"Mások tárgyát nem használhatod!\");
}
if(dialogid == ITEM_DIALOG_EX+1)
    {
       if(!response) return 1,ItemPlayer[playerid] = INVALID_PLAYER_ID;
if(listitem != 0)
{
    new str[128];
    RemoveHexColorFromString(inputtext);
    format(str,128,inputtext[strfind(inputtext,\"]\")+1]);
   CallLocalFunction( \"OnPlayerUseItemEx\", \"iis\", playerid,ItemPlayer[playerid], str );
   ItemPlayer[playerid] = INVALID_PLAYER_ID;
}
}
    if(dialogid == ITEM_DIALOG_ULTRA)
{
if(response) ShowItems(playerid);
else ShowItems(playerid);
return 1;
}
if(dialogid == ITEM_DIALOG_ULTRA+1)
{
    if(!response) return 1;
    //ShowPlayerDialog(playerid,11,DIALOG_STYLE_LIST,\"Mi legyen vele?\",\"Használat\\nEldobás\\nÁthelyezés\",\"Oké\",\"Mégsem\");
    if(listitem == 0)
    {
   CallLocalFunction( \"OnPlayerUseItem\", \"is\", playerid, ItemName[playerid][itemID[playerid]] );
   ItemID[playerid] = -1;
}
if(listitem == 1)
{
    ShowPlayerDialog(playerid,ITEM_DIALOG_ULTRA+3,DIALOG_STYLE_INPUT,\"Eldobás\",\"Mennyit szeretnél eldobni?\",\"Oké\",\"Mégsem\");
}
if(listitem == 2)
{
    ShowPlayerDialog(playerid,ITEM_DIALOG_ULTRA+4,DIALOG_STYLE_INPUT,\"Átadás\",\"Írd be a felhasználó ID-jét, akinek át szeretnéd adni:\",\"Oké\",\"Mégsem\");
}
}
if(dialogid == ITEM_DIALOG_ULTRA+3)
{
    if(!response) return 1;
    if(!strval(inputtext)) return SendClientMessage(playerid,-1,\"Csak számokat adj meg!\"),ShowPlayerDialog(playerid,ITEM_DIALOG_ULTRA+3,DIALOG_STYLE_INPUT,\"Eldobás\",\"Mennyit szeretnél eldobni?\",\"Oké\",\"Mégsem\");
    if(strval(inputtext) > ItemAmount[playerid][itemID[playerid]]) return SendClientMessage(playerid,-1,\"Nincs ennyid ebbõl a tárgyból!\"),ShowPlayerDialog(playerid,ITEM_DIALOG_ULTRA+3,DIALOG_STYLE_INPUT,\"Eldobás\",\"Mennyit szeretnél eldobni?\",\"Oké\",\"Mégsem\");
    DropItem(playerid,ItemID[playerid],strval(inputtext));
    ItemID[playerid] = -1;
    return 1;
}
if(dialogid == ITEM_DIALOG_ULTRA+4)
{
    if(!response) return 1;
    if(!strval(inputtext) && !CompareEx(inputtext,\"0\")) return SendClientMessage(playerid,-1,\"Csak számokat adj meg!\"),ShowPlayerDialog(playerid,ITEM_DIALOG_ULTRA+4,DIALOG_STYLE_INPUT,\"Átadás\",\"Írd be a felhasználó ID-jét, akinek át szeretnéd adni:\",\"Oké\",\"Mégsem\");
    if(!IsPlayerConnected(strval(inputtext))) return SendClientMessage(playerid,-1,\"Nincs ilyen játékos!\"),ShowPlayerDialog(playerid,ITEM_DIALOG_ULTRA+4,DIALOG_STYLE_INPUT,\"Átadás\",\"Írd be a felhasználó ID-jét, akinek át szeretnéd adni:\",\"Oké\",\"Mégsem\");
    if(!PTP(playerid,strval(inputtext))) return SendClientMessage(playerid,-1,\"Nem vagy a játékos közelében.\");
    if(strval(inputtext) == playerid) return SendClientMessage(playerid,-1,\"Magadnak nem adhatod át!\");
    SFMC(strval(inputtext),-1,\"%s át szeretné adni ezt a tárgyat: %s. Elfogadod?\",GetNamei(playerid),ItemName[playerid][itemID[playerid]]);
    ShowPlayerDialog(strval(inputtext),ITEM_DIALOG_ULTRA+5,DIALOG_STYLE_LIST,\"Átadás\",\"Elfogadom.\\nNem fogadom el.\",\"Oké\",\"Mégsem\");
    ItemPlayerID[strval(inputtext)] = playerid;
    return 1;
}
if(dialogid == ITEM_DIALOG_ULTRA+5)
{
    if(!response) return 1;
    if(listitem == 0)
{
    new id = ItemPlayerID[playerid];
   new i = ItemID[id];
    new sucess = AddItem(playerid,ItemName[id],ItemAmount[id],ItemCat[id]);
    if(sucess)
    {
        SFMC(id,-1,\"%s elfogadta a tárgyat.\",GetNamei(playerid));
        SendClientMessage(playerid,-1,\"Sikeresen elfogadtad a tárgyat, elhelyezted a zsebedben.\");
        RemoveItem(playerid,ItemName[id],1,ItemCat[id]);
        ItemID[id] = -1;
        ItemPlayerID[playerid] = -1;
        return 1;
   }
   else
   {
       SendClientMessage(playerid,-1,\"Nincs elég hely a zsebedben!\");
       return 1;
   }
}
if(listitem == 2)
{
    new id = ItemPlayerID[playerid];
        SFMC(id,-1,\"%s nem fogadta el a tárgyat.\",GetNamei(playerid));
        SendClientMessage(playerid,-1,\"Elutasítottad a tárgyat.\");
        ItemID[id] = -1;
        ItemPlayerID[playerid] = -1;
    return 1;
}
return 1;
}
return 1;
}
stock SaveItems(playerid)
{
new m[36],itemfile[64];
    format(itemfile,sizeof(itemfile),\"Inv/%s.ini\",GetNamei(playerid));
    for(new i; i<MAX_ITEMS; i++)
{
    format(m,36,\"Item%d\",i);
    dini_Set(itemfile,m,ItemName[playerid]);
    format(m,36,\"Itemcat%d\",i);
    dini_Set(itemfile,m,ItemCat[playerid]);
    format(m,36,\"Itemamount%d\",i);
    dini_IntSet(itemfile,m,ItemAmount[playerid]);
}
return 1;
}
 
stock LoadItems(playerid)
{
new m[128],itemfile[128];
    format(itemfile,sizeof(itemfile),\"Inv/%s.ini\",GetNamei(playerid));
    if(dini_Exists(itemfile))
    {
        ResetPlayerItems(playerid);
    for(new i; i<MAX_ITEMS; i++)
{
    format(m,128,\"Item%d\",i);
    format(ItemName[playerid],24,\"%s\",dini_Get(itemfile,m));
    format(m,128,\"Itemcat%d\",i);
    format(ItemCat[playerid],36,\"%s\",dini_Get(itemfile,m));
    format(m,128,\"Itemamount%d\",i);
    ItemAmount[playerid] = dini_Int(itemfile,m);
}
}
else
{
dini_Create(itemfile);
ResetPlayerItems(playerid);
SaveItems(playerid);
}
return 1;
}
stock PTP(playerid,id,Float:radi = 2.0)
{
new Float:pos[3];
GetPlayerPos(id,pos[0],pos[1],pos[2]);
if(IsPlayerInRangeOfPoint(playerid,radi,pos[0],pos[1],pos[2])) return 1;
else return 0;
}
Cím: Sramm\'s Inventory System v. 5.0 (Új verzió)
Írta: nooel - 2014. Május 11. - 00:11:36
Az eldobásnál nálam van csak gond?
Pl. 1 kategóriában 2 dolog van. Ha a 2-ból akarok eldobni, az elsõbõl dobja el. Majd ha a 2-at akarom mégegyszer, és van belõle 4-em és 1-et akarok eldobni azt írja nincs ennyim belõle.
Edit: Ugyan ez van ha használni akarom.
Cím: Sramm\'s Inventory System v. 5.0 (Új verzió)
Írta: proxy - 2014. Május 11. - 00:57:14
Ez a tipikus sramm bug..  sramm megír mindent de használni nem kell mert bugos.. sramm csak látszatra dolgozik ;)
Ez a \"system\" csak látszatra készült el! Használni egyenlõre nem kell.. majd talán a 10 - 20as verzió lesz félig használható!
Cím: Sramm\'s Inventory System v. 5.0 (Új verzió)
Írta: Sramm - 2014. Május 11. - 10:16:09
Nem tudom ki vagy, de latszik, hogy nem ismersz :(
Geprol ranezek majd, elirtam valamit az Id-knel.
Cím: Sramm\'s Inventory System v. 5.0 (Új verzió)
Írta: James_Fradies - 2014. Május 11. - 11:04:05
A videót nem lehet megnézni mivel privát.
Cím: Sramm\'s Inventory System v. 5.0 (Új verzió)
Írta: Sramm - 2014. Május 11. - 11:26:25
Video javitva.

Dupla hozzászólás automatikusan összefûzve. ( 2014. Május 11. - 13:25:17 )

Bejelentett bugok javítva, köszönöm, hogy szóltál.
Cím: Sramm\'s Inventory System v. 5.0 (Új verzió)
Írta: Lofoli - 2014. Május 11. - 14:26:26
Jó lett! nekem tetszik.
 :thumbsup: :D
Csak így tovább!
Cím: Sramm\'s Inventory System v. 5.0 (Új verzió)
Írta: Sramm - 2014. Május 10. - 16:53:35
Sramm\'s Inventory System 5.0
 


 

 
Bevezetõ
Az alábbi filterscript azért jött létre, mert az RPG módomhoz kerestem egy Inventory(Hátizsák) rendszert, de sajnos nem találtam olyat, ami megfelelõ lett volna, ezért kénytelen voltam én írni egyet.
Fejlesztési napló:
v. 5.0
- Apróbb bugjavítások
- Az egyik változó neve akadt más incekkel, ez javítva.
- A kategória nélküli 3.0 verzió frissítve lett, már abban is eldobhatjuk, vagy átadhatjuk tárgyainkat.
- Választható rendszerek (kategóriás legyen-e, vagy ne.)
- Új fajta felépítés
v. 4.1
- ID elírás javítva
- Tárgy eldobás javítva. (csak egyet lehetett eldobni)
v. 4.0
- Új alapkövek: Kategóriák hozzáadása a játékhoz
- Új, játékos funkciók: Használat,eldobás,átadás.
- Új kinézet
- Frissített tesztfilterszkript hozzáadva
v. 3.0
- Más játékosokkal való lehetõségek hozzáadása
- Apróbb bugjavítások
- Tesztfilterszkript frissítés
v. 2.0
- Az elsõ verzió teljes cserélése és bugtalanítása.
v. 1.0
- Elsõ kiadott verzió
Függvények (Amennyiben nem használsz kategóriát, a cat[] részeket hagyd ki.)
AddItem(playerid,item[],amount,cat[])


Hozzáad a táskához egy tárgyat.
Paraméterek:

playerid - A játékos, akinek a táskájához hozzá akarsz adni valamit.
item[] - A tárgy neve, amit hozzá akarsz adni.
amount - Amennyi tárgyat akarsz hozzáadni.
cat[] - Amelyik kategóriába be szeretnéd helyezni.
Példa:

CMD:givememedikit(playerid) //Amikor beírja a parancsot
{
AddItem(playerid,\"Medikit\",1,\"Orvosságok\"); //Adunk neki egy darab \"Medikit\" nevû tárgyat az \"Orvosságok\" kategóriába
return 1;
}

Megjegyzés: Ez mindig csak hozzáad tárgyat, nem megváltoztatja. Azaz, ha van már 1 tárgyad, és te 5-t írsz a darabszámhoz, akkor 6 tárgya lesz, és nem 5.
RemoveItem(playerid,item[],amount,cat[])


Elvesz a táskából egy tárgyat.
Paraméterek:

playerid - A játékos, akinek a táskájából el akarsz venni valamit.
item[] - A tárgy neve, amit el akarsz venni.
amount - Amennyi tárgyat el akarsz venni.
cat[] - Amelyik kategóriából törölni szeretnéd.
Példa:

CMD:removememedikit(playerid) //Amikor beírja a parancsot
{
RemoveItem(playerid,\"Medikit\",1,\"Orvosságok\"); //Elveszünk egy darab \"Medikit\" nevû tárgyat az \"Orvosságok\" kategóriából
return 1;
}

ShowItems(playerid)


Megmutatja a táska tartalmát.
Paraméterek:

playerid - A játékos, akinek megmutatjuk táskát.
Példa:

CMD:hatizsakom(playerid) //Amikor beírja a parancsot
{
ShowItems(playerid); //Megmutatjuk neki a táskáját.
return 1;
}

ShowItemsEx(playerid,id,bool:type)


Megmutatja a táska tartalmát egy másik játékosnak.
Paraméterek:

playerid - A játékos, akié a táska.
id - A játékos, akinek megmutatjuk a táskát.
type - true, ha elveheti a tárgyat, false, ha nem
Példa:

CMD:getinv(playerid,params[])
{
new id,type;
    if(sscanf(params,\"ui\",id,type)) return SendClientMessage(playerid,-1,\"Használat: /getinv [id/név] [Típus] (Ha a típus 0, nem veheti el tõle a tárgyat, ha 1 igen)\");
    if(type != 0 && type != 1) return 1;
if(type == 0) ShowItemsEx(id,playerid,false);
else ShowItemsEx(id,playerid,true);
return 1;
}

GetItemSlot(playerid,item[],cat[])


Lekéri, hogy melyik helyen van egy tárgy.
Paraméterek:

playerid - A játékos, akinek a táskájából lekéri.
item[] - A tárgy neve, amit le akarunk kérni.
cat[] - Melyik kategóriában van a tárgy
Példa:

CMD:holamedikit(playerid) //Amikor beírja a parancsot
{
new msg[128];
format(msg,128,\"A Medikit ezen a helyen van: \'%d\'\",GetItemSlot(playerid,\"Medikit\",\"Orvosságok\"));
SendClientMessage(playerid,-1,msg);
return 1;
}

SaveItems(playerid)


Lementi egy játékos hátizsákját.
Paraméterek:

playerid - A játékos, akinek lementjük.
Példa:

CMD:saveinv(playerid) //Amikor beírja a parancsot
{
SaveItems(playerid);
return 1;
}

LoadItems(playerid)


Betölti egy játékos hátizsákját.
Paraméterek:

playerid - A játékos, akinek betöltjük.
Példa:

CMD:loadinv(playerid) //Amikor beírja a parancsot
{
LoadItems(playerid);
return 1;
}

OnItemResponse(playerid,response,listitem,inputtext[])


Lementi egy játékos hátizsákját.
Paraméterek:

playerid - A játékos, aki a dialogot megnyomja.
response - Ha a jó gombot nyomja.
listitem - Melyikre nyom.
inputtext[] - A tárgy neve.
FONTOS:
Az alábbi kódot muszáj ide raknod, hogy ki tudd választani a tárgyat.

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
      OnItemResponse(playerid,dialogid,response,listitem,inputtext);
      return 0;
}

GetItemAmount(playerid,item[],cat[])


Lekéri, hogy mennyi van az adott tárgyból.
Paraméterek:

playerid - A játékos, akinek a táskájából lekéri.
item[] - A tárgy neve, aminek a darabszámát le akarjuk kérni.
cat[] - Melyik kategóriában van a tárgy.
Példa:

CMD:mennyimedikitemvan(playerid) //Amikor beírja a parancsot
{
new msg[128];
format(msg,128,\"Ennyi Medikited van: \'%d\'\",GetItemAmount(playerid,\"Medikit\",\"Orvosságok\"));
SendClientMessage(playerid,-1,msg);
return 1;
}

IsPlayerOwnItem(playerid,item[])


Lekéri, hogy a játékosnál van-e ilyen item.
Paraméterek:

playerid - A játékos, akinek a táskájából lekéri.
item[] - A tárgy neve, amit le akarunk kérni.
Példa:

CMD:vanemedikit(playerid) //Amikor beírja a parancsot
{
if(IsPlayerOwnItem(playerid,\"Medikit\")) return SendClientMessage(playerid,-1,\"Van nálad medikit.\");
else if(!IsPlayerOwnItem(playerid,\"Medikit\")) return SendClientMessage(playerid,-1,\"Nincs nálad medikit.\");
return 1;
}

GetItemName(playerid,slot)


Lekéri a sloton lévõ tárgy nevét.
Paraméterek:

playerid - A játékos, akinek lekérjük.
slot - Aminek a nevét lekérjük.
Példa:

CMD:getname(playerid) //Amikor beírja a parancsot
{
new msg[128];
format(msg,128,\"Slot 1-en lévõ tárgy neve: \'%s\'\",GetItemName(playerid,1));
SendClientMessage(playerid,-1,msg);
        return 1;
}

GetItemCategory(playerid,slot)


Lekéri a sloton lévõ tárgy kategóriáját.
Paraméterek:

playerid - A játékos, akinek lekérjük.
slot - Aminek a nevét lekérjük.
Példa:

CMD:getcat(playerid) //Amikor beírja a parancsot
{
new msg[128];
format(msg,128,\"Slot 1-en lévõ tárgy kategóriája: \'%s\'\",GetItemCategory(playerid,1));
SendClientMessage(playerid,-1,msg);
        return 1;
}

ResetPlayerItems(playerid)


Nullázza az játékos összes tárgyát.
Paraméterek:

playerid - A játékos, akinek nullázni szeretnénk.
Példa:

CMD:resetitem(playerid) //Amikor beírja a parancsot
{
ResetPlayerItems(playerid);
return 1;
}

Eljárások
public OnPlayerUseItem(playerid,item[])


Akkor hívódik meg, amikor egy játékos rákattint egy tárgyra a hátiszáknál, ami a ShowItems(playerid)-nél hívódik meg.

Paraméterek:

playerid - A játékos, aki rányomott.
item[] - Annak a tárgynak a neve, amelyikre rányomott.
Példa:
Ha pl. én adok valakinek egy Medikit-et:

AddItem(playerid,\"Medikit\",1); //Megadom a \"Medikit\" nevû tárgyat a játékosnak

És utána õ rákattint:
public OnPlayerUseItem(playerid,item[])
{
if(CompareEx(item,\"Medikit\")) //Tehát ha egyezik annak a tárgynak a neve, amire rákattintottam a \"Medikit\"-tel... (Az inc tartalmazza a CompareEx-et)
{
    SetPlayerHealth(playerid,100); //Beállítjuk a játékos életét 100-ra
    RemoveItem(playerid,\"Medikit\",1); //És elvesszük tõle, mert ugye már használta.
    return 1;
}
return 1;
}

Megjegyzés: Ha olyan tárgyat adsz neki, amit aztán itt nem kezelsz, arra hiába kattint rá, nem fog történni semmi.
public OnPlayerUseItemEx(playerid,fromplayerid,item[])


Akkor hívódik meg, amikor egy játékos rákattint egy tárgyra egy másik játékos táskájában, ami a ShowItemsEx()-nél hívódik meg.

Paraméterek:

playerid - A játékos, aki rányomott.
fromplayerid - A játékos, akinek a táskájában túrkált.
item[] - Annak a tárgynak a neve, amelyikre rányomott.
Példa:
public OnPlayerUseItemEx(playerid,fromplayerid,item[])
{
new amount = GetItemAmount(fromplayerid,item);
        RemoveItem(fromplayerid,item,amount); //elvesszük az elõzõ tulajtól
AddItem(playerid,item,amount); //odaadjuk az újnak
return 1;
}

Fontos:
1. Az alábbi kódot muszáj ide raknod, hogy ki tudd választani a tárgyakat.

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
      OnItemResponse(playerid,dialogid,response);
      return 0;
}

2. Létre kell hoznod egy \"Inv\" mappát, hogy tudja mibe menteni a rendszer a dolgokat.
3. Az 5.0-ás verziótól kezdve az #include <inventory> elé be kell raknod, hogy
szeretnél-e használni kategóriákat, vagy sem.
Tehát így kell kinéznie:
#define INVENTORY_WITH_CATEGORY 1 // Ha 1, akkor lesznek kategóriák, ha 0, akkor nem
#include <inventory>

Megjegyzések
Ha növeled a maximum tárgyakat, minden játékost, akinek elõtte kevesebb volt szinkronizálnod kell, különben kifagyhat a szerver!
Ha bugot találsz, vagy ötleted van a témában elküldheted. :)
Külön köszönet
F0rian - Compare
Videó, képanyag
v. 2.0, v. 3.0 -

v. 4.1 -

Letöltés
v. 5.0 (Ajánlott)
srinv5.0.rar (Inventory pack)
v. 4.1
inventory.rar (Include+Inv mappa tesztfájllal+Teszt filterscript) |
v. 3.0
inventory.rar (Include+Inv mappa tesztfájllal+Teszt filterscript) | inventory.inc
v. 2.0
inventory.rar (Include+Inv mappa tesztfájllal+Teszt filterscript) | inventory.inc
Kód: (v. 4.1)



/*
/*
         Sramm\'s Inventory System
& Készítette: Sramm
& Utoljára frissítve: 2014.05.11
& Veziószám: 4.1
(c) Sramm 2013-2014
*/
#include <dini>
#if defined _INC_inventory
#endinput
#endif
#define _INC_inventory
#define SFMC(%0,%1,%2) do{new _str[128]; format(_str,128,%2); SendClientMessage(%0,%1,_str);}while(INVFALSE)
#define MAX_ITEMS 100
#define MAX_DROP_ITEMS 200
#define ITEM_DIALOG 5842
#define ITEM_DIALOG_EX ITEM_DIALOG+10
#define ITEM_DIALOG_CAT ITEM_DIALOG_EX+10
#define ITEM_DIALOG_ULTRA ITEM_DIALOG_CAT+10
 
/*
native AddItem(playerid,item[],amount,cat[]);
native RemoveItem(playerid,item[],amount,cat[]);
native ShowItems(playerid);
native ShowItemsEx(playerid,id);
native ShowRealItems(playerid,cat[]);
native GetItemSlot(playerid,item[],cat[]);
native SaveItems(playerid);
native LoadItems(playerid);
native OnItemResponse(playerid,response,listitem,inputtext[]);
native GetItemAmount(playerid,item[],cat[]);
native IsPlayerOwnItem(playerid,item[]);
native ResetPlayerItems(playerid);
native GetItemName(playerid,itemslot);
native GetItemCategory(playerid,itemslot);
*/
new INVFALSE = false;
new ItemName[MAX_PLAYERS][MAX_ITEMS][36];
new ItemCat[MAX_PLAYERS][MAX_ITEMS][36];
new ItemAmount[MAX_PLAYERS][MAX_ITEMS];
new ItemID[MAX_PLAYERS];
new listItem[MAX_ITEMS];
new ItemPlayer[MAX_PLAYERS] = INVALID_PLAYER_ID;
new ItemPlayerID[MAX_PLAYERS];
enum ditInfo
{
Text3D:ittext,
Float:posX,
Float:posY,
Float:posZ,
VW,
INV,
itname[36],
itcat[36],
itamount,
itobject
};
new DropItemInfo[MAX_ITEMS][ditInfo];
forward OnPlayerUseItem(playerid,item[]);
forward OnPlayerUseItemEx(playerid,fromplayerid,item[]);
stock RemoveHexColorFromString(string[])
{
    new
        pos[2];
    pos[0] = strfind(string,\"{\",true,0);
pos[1] = strfind(string,\"}\",true,0);
for(new i;i < strlen(string); i++)
{
    if(pos[0]+7 == pos[1])
    {
        strdel(string, pos[0], pos[1]+1);
        pos[0] = strfind(string,\"{\",true,0);
   pos[1] = strfind(string,\"}\",true,0);
}
}
return 1;
}
stock GetNamei(playerid)
{
new n[MAX_PLAYER_NAME];
GetPlayerName(playerid,n,sizeof(n));
return n;
}
 
stock CompareEx(comp[], with[]) //By: Fl0rian
{
new LenghtComp = strlen(comp);
new LenghtWith = strlen(with);
new Character;
if( LenghtComp != LenghtWith ) return false;
for( new i = 0; i < LenghtComp; i++ )
{
    if( comp == with )
    {
        Character++;
}
}
if( LenghtComp == Character ) return true;
return false;
}
stock DropItem(playerid,id,amount)
{
for(new i; i<MAX_DROP_ITEMS; i++)
{
   if(!IsValidObject(DropItemInfo[itobject]))
   {
      new Float:Xp,Float:Yp,Float:Zp;
      GetPlayerPos(playerid, Xp, Yp, Zp);
      DropItemInfo[itobject] = CreateObject(1210, Xp, Yp, Zp-1, 0.0, 0.0, 0.0);
      DropItemInfo[ittext] = Create3DTextLabel(ItemName[playerid][id], -1, Xp,Yp,Zp, 10.0,GetPlayerVirtualWorld(playerid),1);
      DropItemInfo[posX] = Xp;
      DropItemInfo[posY] = Yp;
      DropItemInfo[posZ] = Zp;
      DropItemInfo[VW] = GetPlayerVirtualWorld(playerid);
      DropItemInfo[iNV] = GetPlayerInterior(playerid);
      format(DropItemInfo[itname],36,ItemName[playerid][id]);
      format(DropItemInfo[itcat],36,ItemCat[playerid][id]);
      DropItemInfo[itamount] = amount;
      RemoveItem(playerid,ItemName[playerid][id],amount,ItemCat[playerid][id]);
      return 1;
   }
}
return 1;
}
stock PickUpItem(playerid)
{
    for(new i; i<MAX_DROP_ITEMS; i++)
    {
if(IsPlayerInRangeOfPoint(playerid,3.0,DropItemInfo[posX],DropItemInfo[posY],DropItemInfo[posZ]) && GetPlayerVirtualWorld(playerid) == DropItemInfo[VW] && GetPlayerInterior(playerid) == DropItemInfo[iNV])
{
   new sucess = AddItem(playerid,DropItemInfo[itname],DropItemInfo[itamount],DropItemInfo[itcat]);
   if(sucess)
   {
       Delete3DTextLabel(DropItemInfo[ittext]);
       DestroyObject(DropItemInfo[itobject]);
       return 1;
    }
}
}
return 1;
}
stock AddItem(playerid,item[],amount,category[] = \"Egyéb\")
{
if(amount <= 0) return 0;
if(strlen(item) > 128) return 0;
new bool: count[2] = false;
for(new i; i<MAX_ITEMS; i++)
{
    if(CompareEx(ItemName[playerid],item) && CompareEx(ItemCat[playerid],category))
    {
   count[0] = true;
        ItemAmount[playerid] += amount;
        return 1;
}
}
if(count[0] == false)
{
    for(new i; i<MAX_ITEMS; i++)
{
    if(CompareEx(ItemName[playerid],\"Üres\"))
    {
      count[1] = true;
      format(ItemName[playerid],36,\"%s\",item);
      format(ItemCat[playerid],36,\"%s\",category);
        ItemAmount[playerid] = amount;
        return 1;
   }
}
}
if(count[1] != true) return SendClientMessage(playerid,-1,\"Betelt a tárhelyed, üríts belõle.\"),0;
return 1;
}
stock RemoveItemEx(playerid,i)
{
format(ItemName[playerid],36,\"%s\",\"Üres\");
format(ItemCat[playerid],36,\"%s\",\"Üres\");
ItemAmount[playerid] = 0;
return 1;
}
stock RemoveItem(playerid,item[],amount,category[])
{
    for(new i; i<MAX_ITEMS; i++)
{
        if(CompareEx(ItemName[playerid],item) && CompareEx(ItemCat[playerid],category))
{
    if(ItemAmount[playerid] > amount)
    {
        ItemAmount[playerid] -= amount;
   }
   else if(ItemAmount[playerid] == amount || ItemAmount[playerid] < amount)
   {
      format(ItemName[playerid],36,\"%s\",\"Üres\");
      format(ItemCat[playerid],36,\"%s\",\"Üres\");
      ItemAmount[playerid] = 0;
   }
   return 1;
}
}
return 1;
}
stock ShowItems(playerid)
{
new msg[128],dialogstr[3000],bool:c;
for(new i; i<MAX_ITEMS; i++)
{
    if(!CompareEx(ItemCat[playerid],\"Üres\"))
    {
        c = true;
   format(msg,128,\"\\n%s\",ItemCat[playerid]);
   if(strfind(dialogstr, msg, true) == -1)
   {
      strcat(dialogstr,msg);
   }
}
}
if(c != false)
{
ShowPlayerDialog(playerid,ITEM_DIALOG_CAT,DIALOG_STYLE_LIST,\"Táska tartalma\",dialogstr,\"Választ\",\"Mégsem\");
}
else SendClientMessage( playerid, -1, \"Itt nincs semmi.\" );
return 1;
}
 
stock ShowRealItems(playerid,cat[])
{
new msg[128],dialogstr[3000],bool:c,count=-1;
for(new i; i<MAX_ITEMS; i++)
{
    if(!CompareEx(ItemName[playerid],\"Üres\") && CompareEx(ItemCat[playerid],cat))
    {
        c = true;
        count++;
   format(msg,128,\"\\n[%ddb] %s\",ItemAmount[playerid],ItemName[playerid]);
   strcat(dialogstr,msg);
   listItem[count] = i;
}
}
if(c != false) ShowPlayerDialog(playerid,ITEM_DIALOG,DIALOG_STYLE_LIST,\"Táska tartalma\",dialogstr,\"Választ\",\"Mégsem\");
else SendClientMessage( playerid, -1, \"Itt nincs semmi.\" );
return 1;
}
 
stock ShowItemsEx(playerid,id,bool:use = false)
{
new msg[128],dialogstr[3000],bool:c;
for(new i; i<MAX_ITEMS; i++)
{
    if(!CompareEx(ItemName[playerid],\"Üres\"))
    {
        c = true;
   format(msg,128,\"\\n[%d] %s\",ItemAmount[playerid],ItemName[playerid]);
   strcat(dialogstr,msg);
}
}
if(use == false)
{
if(c != false) ShowPlayerDialog(id,ITEM_DIALOG_EX,DIALOG_STYLE_LIST,\"Tárhely\",dialogstr,\"\",\"Oké\");
else SendClientMessage( id, -1, \"Nincs semmi a táskájában.\" );
}
else
{
    ItemPlayer[id] = playerid;
if(c != false) ShowPlayerDialog(id,ITEM_DIALOG_EX+1,DIALOG_STYLE_LIST,\"Tárhely\",dialogstr,\"\",\"Oké\");
else SendClientMessage( id, -1, \"Nincs semmi a táskájában.\" );
}
return 1;
}
 
stock GetItemSlot(playerid,item[],cat[])
{
    for(new i; i<MAX_ITEMS; i++)
    {
        if(CompareEx(ItemName[playerid],item) && CompareEx(ItemCat[playerid],cat)) return i;
}
return -1;
}
stock IsPlayerOwnItem(playerid,item[])
{
    for(new i; i<MAX_ITEMS; i++)
    {
        if(CompareEx(ItemName[playerid],item)) return 1;
}
return 0;
}
stock GetItemAmount(playerid,item[],cat[])
{
    for(new i; i<MAX_ITEMS; i++)
    {
        if(CompareEx(ItemName[playerid],item) && CompareEx(ItemCat[playerid],cat)) return ItemAmount[playerid];
}
return -1;
}
stock GetItemName(playerid,itemslot) return ItemName[playerid][itemslot];
stock GetItemCategory(playerid,itemslot) return ItemCat[playerid][itemslot];
stock ResetPlayerItems(playerid)
{
for(new i; i<MAX_ITEMS; i++)
{
    format(ItemName[playerid],36,\"%s\",\"Üres\");
    format(ItemCat[playerid],36,\"%s\",\"Üres\");
ItemAmount[playerid] = 0;
}
return 1;
}
stock OnItemResponse(playerid, dialogid, response,listitem, inputtext[])
{
    if(dialogid == ITEM_DIALOG_CAT)
    {
        if(!response) return 1;
ShowRealItems(playerid,inputtext);
return 1;
}
if(dialogid == ITEM_DIALOG)
    {
       if(!response) return 1;
       ShowPlayerDialog(playerid,ITEM_DIALOG_ULTRA+1,DIALOG_STYLE_LIST,\"Mi legyen vele?\",\"Használat\\nEldobás\\nÁtadás\",\"Oké\",\"Mégsem\");
       ItemID[playerid] = listItem[listitem];
}
if(dialogid == ITEM_DIALOG_EX)
    {
       if(!response) return 1;
if(listitem != 0) return SendClientMessage(playerid,-1,\"Mások tárgyát nem használhatod!\");
}
if(dialogid == ITEM_DIALOG_EX+1)
    {
       if(!response) return 1,ItemPlayer[playerid] = INVALID_PLAYER_ID;
if(listitem != 0)
{
    new str[128];
    RemoveHexColorFromString(inputtext);
    format(str,128,inputtext[strfind(inputtext,\"]\")+1]);
   CallLocalFunction( \"OnPlayerUseItemEx\", \"iis\", playerid,ItemPlayer[playerid], str );
   ItemPlayer[playerid] = INVALID_PLAYER_ID;
}
}
    if(dialogid == ITEM_DIALOG_ULTRA)
{
if(response) ShowItems(playerid);
else ShowItems(playerid);
return 1;
}
if(dialogid == ITEM_DIALOG_ULTRA+1)
{
    if(!response) return 1;
    //ShowPlayerDialog(playerid,11,DIALOG_STYLE_LIST,\"Mi legyen vele?\",\"Használat\\nEldobás\\nÁthelyezés\",\"Oké\",\"Mégsem\");
    if(listitem == 0)
    {
   CallLocalFunction( \"OnPlayerUseItem\", \"is\", playerid, ItemName[playerid][itemID[playerid]] );
   ItemID[playerid] = -1;
}
if(listitem == 1)
{
    ShowPlayerDialog(playerid,ITEM_DIALOG_ULTRA+3,DIALOG_STYLE_INPUT,\"Eldobás\",\"Mennyit szeretnél eldobni?\",\"Oké\",\"Mégsem\");
}
if(listitem == 2)
{
    ShowPlayerDialog(playerid,ITEM_DIALOG_ULTRA+4,DIALOG_STYLE_INPUT,\"Átadás\",\"Írd be a felhasználó ID-jét, akinek át szeretnéd adni:\",\"Oké\",\"Mégsem\");
}
}
if(dialogid == ITEM_DIALOG_ULTRA+3)
{
    if(!response) return 1;
    if(!strval(inputtext)) return SendClientMessage(playerid,-1,\"Csak számokat adj meg!\"),ShowPlayerDialog(playerid,ITEM_DIALOG_ULTRA+3,DIALOG_STYLE_INPUT,\"Eldobás\",\"Mennyit szeretnél eldobni?\",\"Oké\",\"Mégsem\");
    if(strval(inputtext) > ItemAmount[playerid][itemID[playerid]]) return SendClientMessage(playerid,-1,\"Nincs ennyid ebbõl a tárgyból!\"),ShowPlayerDialog(playerid,ITEM_DIALOG_ULTRA+3,DIALOG_STYLE_INPUT,\"Eldobás\",\"Mennyit szeretnél eldobni?\",\"Oké\",\"Mégsem\");
    DropItem(playerid,ItemID[playerid],strval(inputtext));
    ItemID[playerid] = -1;
    return 1;
}
if(dialogid == ITEM_DIALOG_ULTRA+4)
{
    if(!response) return 1;
    if(!strval(inputtext) && !CompareEx(inputtext,\"0\")) return SendClientMessage(playerid,-1,\"Csak számokat adj meg!\"),ShowPlayerDialog(playerid,ITEM_DIALOG_ULTRA+4,DIALOG_STYLE_INPUT,\"Átadás\",\"Írd be a felhasználó ID-jét, akinek át szeretnéd adni:\",\"Oké\",\"Mégsem\");
    if(!IsPlayerConnected(strval(inputtext))) return SendClientMessage(playerid,-1,\"Nincs ilyen játékos!\"),ShowPlayerDialog(playerid,ITEM_DIALOG_ULTRA+4,DIALOG_STYLE_INPUT,\"Átadás\",\"Írd be a felhasználó ID-jét, akinek át szeretnéd adni:\",\"Oké\",\"Mégsem\");
    if(!PTP(playerid,strval(inputtext))) return SendClientMessage(playerid,-1,\"Nem vagy a játékos közelében.\");
    if(strval(inputtext) == playerid) return SendClientMessage(playerid,-1,\"Magadnak nem adhatod át!\");
    SFMC(strval(inputtext),-1,\"%s át szeretné adni ezt a tárgyat: %s. Elfogadod?\",GetNamei(playerid),ItemName[playerid][itemID[playerid]]);
    ShowPlayerDialog(strval(inputtext),ITEM_DIALOG_ULTRA+5,DIALOG_STYLE_LIST,\"Átadás\",\"Elfogadom.\\nNem fogadom el.\",\"Oké\",\"Mégsem\");
    ItemPlayerID[strval(inputtext)] = playerid;
    return 1;
}
if(dialogid == ITEM_DIALOG_ULTRA+5)
{
    if(!response) return 1;
    if(listitem == 0)
{
    new id = ItemPlayerID[playerid];
   new i = ItemID[id];
    new sucess = AddItem(playerid,ItemName[id],ItemAmount[id],ItemCat[id]);
    if(sucess)
    {
        SFMC(id,-1,\"%s elfogadta a tárgyat.\",GetNamei(playerid));
        SendClientMessage(playerid,-1,\"Sikeresen elfogadtad a tárgyat, elhelyezted a zsebedben.\");
        RemoveItem(playerid,ItemName[id],1,ItemCat[id]);
        ItemID[id] = -1;
        ItemPlayerID[playerid] = -1;
        return 1;
   }
   else
   {
       SendClientMessage(playerid,-1,\"Nincs elég hely a zsebedben!\");
       return 1;
   }
}
if(listitem == 2)
{
    new id = ItemPlayerID[playerid];
        SFMC(id,-1,\"%s nem fogadta el a tárgyat.\",GetNamei(playerid));
        SendClientMessage(playerid,-1,\"Elutasítottad a tárgyat.\");
        ItemID[id] = -1;
        ItemPlayerID[playerid] = -1;
    return 1;
}
return 1;
}
return 1;
}
stock SaveItems(playerid)
{
new m[36],itemfile[64];
    format(itemfile,sizeof(itemfile),\"Inv/%s.ini\",GetNamei(playerid));
    for(new i; i<MAX_ITEMS; i++)
{
    format(m,36,\"Item%d\",i);
    dini_Set(itemfile,m,ItemName[playerid]);
    format(m,36,\"Itemcat%d\",i);
    dini_Set(itemfile,m,ItemCat[playerid]);
    format(m,36,\"Itemamount%d\",i);
    dini_IntSet(itemfile,m,ItemAmount[playerid]);
}
return 1;
}
 
stock LoadItems(playerid)
{
new m[128],itemfile[128];
    format(itemfile,sizeof(itemfile),\"Inv/%s.ini\",GetNamei(playerid));
    if(dini_Exists(itemfile))
    {
        ResetPlayerItems(playerid);
    for(new i; i<MAX_ITEMS; i++)
{
    format(m,128,\"Item%d\",i);
    format(ItemName[playerid],24,\"%s\",dini_Get(itemfile,m));
    format(m,128,\"Itemcat%d\",i);
    format(ItemCat[playerid],36,\"%s\",dini_Get(itemfile,m));
    format(m,128,\"Itemamount%d\",i);
    ItemAmount[playerid] = dini_Int(itemfile,m);
}
}
else
{
dini_Create(itemfile);
ResetPlayerItems(playerid);
SaveItems(playerid);
}
return 1;
}
stock PTP(playerid,id,Float:radi = 2.0)
{
new Float:pos[3];
GetPlayerPos(id,pos[0],pos[1],pos[2]);
if(IsPlayerInRangeOfPoint(playerid,radi,pos[0],pos[1],pos[2])) return 1;
else return 0;
}
Cím: Sramm\'s Inventory System v. 5.0 (Új verzió)
Írta: nooel - 2014. Május 11. - 00:11:36
Az eldobásnál nálam van csak gond?
Pl. 1 kategóriában 2 dolog van. Ha a 2-ból akarok eldobni, az elsõbõl dobja el. Majd ha a 2-at akarom mégegyszer, és van belõle 4-em és 1-et akarok eldobni azt írja nincs ennyim belõle.
Edit: Ugyan ez van ha használni akarom.
Cím: Sramm\'s Inventory System v. 5.0 (Új verzió)
Írta: proxy - 2014. Május 11. - 00:57:14
Ez a tipikus sramm bug..  sramm megír mindent de használni nem kell mert bugos.. sramm csak látszatra dolgozik ;)
Ez a \"system\" csak látszatra készült el! Használni egyenlõre nem kell.. majd talán a 10 - 20as verzió lesz félig használható!
Cím: Sramm\'s Inventory System v. 5.0 (Új verzió)
Írta: Sramm - 2014. Május 11. - 10:16:09
Nem tudom ki vagy, de latszik, hogy nem ismersz :(
Geprol ranezek majd, elirtam valamit az Id-knel.
Cím: Sramm\'s Inventory System v. 5.0 (Új verzió)
Írta: James_Fradies - 2014. Május 11. - 11:04:05
A videót nem lehet megnézni mivel privát.
Cím: Sramm\'s Inventory System v. 5.0 (Új verzió)
Írta: Sramm - 2014. Május 11. - 11:26:25
Video javitva.

Dupla hozzászólás automatikusan összefûzve. ( 2014. Május 11. - 13:25:17 )

Bejelentett bugok javítva, köszönöm, hogy szóltál.
Cím: Sramm\'s Inventory System v. 5.0 (Új verzió)
Írta: Lofoli - 2014. Május 11. - 14:26:26
Jó lett! nekem tetszik.
 :thumbsup: :D
Csak így tovább!
Cím: Sramm\'s Inventory System v. 5.0 (Új verzió)
Írta: Peter1481048284 - 2014. Június 10. - 17:10:27
Kérdés. Nektek nem hasonlít http://forum.sa-mp.com/showthread.php?t=130436 Ez valamire?
Cím: Sramm\'s Inventory System v. 5.0 (Új verzió)
Írta: Sramm - 2014. Június 10. - 20:41:40
Megint valaki okos próbál lenni  :facepalm:
De igen, sõt ugyan az, ha megnézed. :wall:
Cím: Sramm\'s Inventory System v. 5.0 (Új verzió)
Írta: BoOy - 2014. Június 10. - 22:29:07
Idézetet írta: Peter date=1402413027\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"48177\" data-ipsquote-contentclass=\"forums_Topic
Kérdés. Nektek nem hasonlít http://forum.sa-mp.com/showthread.php?t=130436 Ez valamire?
 
A függvények ugyan azok, de a kód az más :D
Cím: Sramm\'s Inventory System v. 5.0 (Új verzió)
Írta: DrAkE - 2014. Június 10. - 22:51:20

stock RemoveHexColorFromString(string[])
{
    new
        pos[2];
    pos[0] = strfind(string,\"{\",true,0);
        pos[1] = strfind(string,\"}\",true,0);
        for(new i;i < strlen(string); i++)
        {
            if(pos[0]+7 == pos[1])
            {
                strdel(string, pos[0], pos[1]+1);
                pos[0] = strfind(string,\"{\",true,0);
                        pos[1] = strfind(string,\"}\",true,0);
                }
        }
        return 1;
}

 
Kiégett a szemem ettõl a ciklustól... (NEM JÁR KEKSZ?!?!?!)
Cím: Sramm\'s Inventory System v. 5.0 (Új verzió)
Írta: Sramm - 2014. Június 16. - 15:16:53
Régen írtam, és ha kevésbé parasztul írod azt is megértem.
 
stock RemoveHexColorFromString(string[])
{
    new
        pos[2];
    pos[0] = strfind(string,\"{\",true,0);
        pos[1] = strfind(string,\"}\",true,0);
        while(pos[0] != -1 && pos[1]  != -1)
        {
            if(pos[0]+7 == pos[1])
            {
                strdel(string, pos[0], pos[1]+1);
                pos[0] = strfind(string,\"{\",true,0);
                        pos[1] = strfind(string,\"}\",true,0);
                }
        }
        return 1;
}
Cím: Sramm\'s Inventory System v. 5.0 (Új verzió)
Írta: Pedró - 2014. Június 16. - 21:57:37
http://sampforum.hu/index.php?topic=38295.msg395990#msg395990

Dupla hozzászólás automatikusan összefûzve. ( 2014. Június 16. - 21:58:16 )

http://sampforum.hu/index.php?topic=38295.msg396021#msg396021
Cím: Sramm\'s Inventory System v. 5.0 (Új verzió)
Írta: Sramm - 2014. Június 17. - 10:42:45
Érdembeli különbség nincs, kinek mi tetszik..
Cím: Sramm\'s Inventory System v. 5.0 (Új verzió)
Írta: Hasirama - 2014. Augusztus 03. - 21:01:08
Olyat nem lehetne belerakni, hogy fegyvernél elõ lehessen venni, el lehessen rakni, külön a töltényt is mentse, és ha eldobod és felveszed az abban lévõ töltényt töltse vissza?
Vagy ezeket hogyan lehetne megoldani?
Cím: Sramm\'s Inventory System v. 5.0 (Új verzió)
Írta: Sramm - 2014. Augusztus 06. - 17:28:22
Új verzió kiadva, további tudnivalók a fõposztban.
 
Idézetet írta: Hasirama date=1407092468\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"48177\" data-ipsquote-contentclass=\"forums_Topic
Olyat nem lehetne belerakni, hogy fegyvernél elõ lehessen venni, el lehessen rakni, külön a töltényt is mentse, és ha eldobod és felveszed az abban lévõ töltényt töltse vissza?
Vagy ezeket hogyan lehetne megoldani?
 
Megcsinálom, ha lesz rá idõm.
Cím: Sramm\'s Inventory System v. 5.0 (Új verzió)
Írta: Frank Malcov - 2018. Január 08. - 12:09:13
Miért van az hogy beteszem az inc-et a pawnoba + a mappát is és a módomba is beirom az incet meg definálom hogy ne legyenek kategóriák(mivel nekem nem kell), de mikor lefuttatom akkor a pawno nem válaszol.Pontosabban egy ideig nem válaszol aztán pedig megint működik.Errort , warningot nem ír de nem értem hogy miért csinálja ezt.Esetleg lehet h a laptopom nem elég erős hozzá?
Cím: Sramm\'s Inventory System v. 5.0 (Új verzió)
Írta: Amf - 2018. Március 12. - 05:18:37
Találtam egy hibát. Ha át adod a tárgyat nem vonja le, továbbra is megvan. Egyébként jó cucc.
 
 
 
Annyi zavar még hogy epic nagy amx lesz tőle..
Cím: Sramm\'s Inventory System v. 5.0 (Új verzió)
Írta: Frank Malcov - 2018. Július 12. - 14:36:08
Berakom igy a modomba de nem jó valamiért, pedig azt irtad ott felül, hogy ide kell berakni ezt a cuccot:
 
 
 

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    {
      OnItemResponse(playerid,dialogid,response);
      return 0;
    }
    return 1;
}

 
 
 
Ezt írja ki:
 
H:\\GTA Szerver 0.3.7\\gamemodes\\RPG.pwn(2461) : warning 202: number of arguments does not match definition
H:\\GTA Szerver 0.3.7\\gamemodes\\RPG.pwn(2461) : warning 202: number of arguments does not match definition
H:\\GTA Szerver 0.3.7\\gamemodes\\RPG.pwn(2464) : warning 225: unreachable code

 
 
 
Bocsi de nem vagyok pro scripter :/
Cím: Sramm\'s Inventory System v. 5.0 (Új verzió)
Írta: gbr333 - 2018. Július 12. - 15:19:48

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
OnItemResponse(playerid,dialogid,response);
return 1;
}
Cím: Sramm\'s Inventory System v. 5.0 (Új verzió)
Írta: Frank Malcov - 2018. Július 15. - 19:52:36
Nállam erre warningotkat ír.Nekem már az OnDialogResponse-nál vannak dialógok, lehet hogy ez kavar be?Beteszem a dialogóok elé és 3 warning.Am neked is kifagy a pawno amikor lefuttatod a gm-et?
Cím: Sramm\'s Inventory System v. 5.0 (Új verzió)
Írta: gbr333 - 2018. Július 15. - 20:49:43
A saját dialogjaid elé tedd.
 

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
      OnItemResponse(playerid,dialogid,response,listitem,inputtext);
      return 0;
}