Szerző Téma: [MYSQL] Inventory rendszer(0.1)  (Megtekintve 1785 alkalommal)

[MYSQL] Inventory rendszer(0.1)
« Dátum: 2016. Június 23. - 16:10:43 »
+6
Sziasztok.
A napokban elkezdtem írogatni egy inventory rendszert.
A rendszer tartalmazza a /taska parancsot, melyel megnézhetjük mi van nálunk, tartalmazza a /giveitem parancsot, melyen az adminok itemet tudnak adni a játékosnak.
Készítési idő: pár óra
Item típusok:
0 - Kaja
1 - Pia
2 - Cigaretta
3 - Drog
4 - Fegyver(nincs kész)
100 - Használhatatlan
0.1 verzió:
*Admin tud adni neked cuccokat.
*A táskában levő cuccokat tudod használni( megenni/meginni/elszívni)
Fejlesztészre vár:
*Fegyverek a táskában
*Cuccok eldobása
*Cuccok átadása
 

#include a_samp
#include a_mysql
#include zcmd
#include sscanf2
 
CMD:taska(playerid,params[])
{
Inventory(playerid);
return 1;
}
CMD:giveitem(playerid,params[])
{
    if(IsPlayerAdmin(playerid))
{
    new itemnev[128], jatekosnev[128], darab, fajta;
    if(sscanf(params, \"s[128]dds[128]\", itemnev, darab, fajta, jatekosnev)) return SendClientMessage(playerid, -1, \"Használat: /giveitem [itemnév] [darab] [type(/itemtypes)] [játékosnév]\");
format(SQL_Input,sizeof(SQL_Input),\"SELECT darab FROM `inventory` WHERE `kinek` = \'%s\' AND `itemname` = \'%s\'\",jatekosnev,itemnev );
   mysql_query(SQLHandle, SQL_Input);
if(!cache_num_rows())
{
    format(query, sizeof(query), \"INSERT INTO `inventory` (itemname,darab,kinek,type) VALUES ( \'%s\', \'%d\', \'%s\', \'%d\')\", itemnev, darab, jatekosnev, fajta);
       mysql_query(SQLHandle, query);
}
else
{
    new hanyvanneki = cache_get_field_content_int(0, \"darab\");
    format(SQL_Input, sizeof(SQL_Input), \"UPDATE `inventory` SET `darab`= \'%i\' WHERE `kinek` = \'%s\' AND `itemname` = \'%s\'\",hanyvanneki+darab, jatekosnev,itemnev);
   mysql_tquery(SQLHandle, SQL_Input, \"\", \"\");
}
    new string[256];
    format(string, sizeof(string), \"(( Sikeresen adtál %s-nak/nek %s itemből %d darabot. ))\", jatekosnev,itemnev,darab);
    SendClientMessage(playerid, CITROM, string);
    new jatekosnak[128];
    format(jatekosnak,sizeof(jatekosnak),\"Egy admin adott neked %s itemből %d darabot!\",itemnev,darab);
    SendClientMessage(GetPlayerIdFromName(jatekosnev), ZOLD, jatekosnak);
}
return 1;
}
forward OnPlayerInventory(playerid);
public OnPlayerInventory(playerid)
{
new str1[2048], str2[32];
    new tempAdmin[64], tempName[64][24];
format(str1, sizeof(str1), \"Item\\tDarab\");
if(!cache_num_rows()) return SendClientMessage(playerid, -1, \"Táskád üres\");
for(new i; i < cache_get_row_count(); i++)
{
     cache_get_field_content(i, \"itemname\", tempName, SQLHandle, 24);
      tempAdmin = cache_get_field_content_int(i, \"darab\");
     format(str2, sizeof(str2), \"\\n%s\\t%i\", tempName, tempAdmin);
     strcat(str1, str2);
}
ShowPlayerDialog(playerid, 2000, DIALOG_STYLE_TABLIST_HEADERS, \"Táska\", str1 , \"Rendben\", \"Mégsem\");
return 1;
}
stock Inventory(playerid)
{
mysql_format(SQLHandle, SQL_Input, sizeof(SQL_Input), \"SELECT * FROM inventory WHERE kinek = \'%s\'\",GetName(playerid));
    mysql_tquery(SQLHandle, SQL_Input, \"OnPlayerInventory\", \"i\", playerid);
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == 2000)
{
    if(response)
    {
         SetPVarString(playerid,\"Item\",inputtext);
             ShowPlayerDialog(playerid,2001,DIALOG_STYLE_LIST,\"Item\",\"Használ\\nÁtad\\nEldob\",\"Rendben\",\"Bezár\");
    }
}
if(dialogid == 2001)
{
    new itemnev[128];
         GetPVarString(playerid,\"Item\",itemnev,sizeof(itemnev));
         
         if(listitem == 0 && response)
         {
             new nev[24];
      GetPVarString(playerid,\"Szemely\",nev,sizeof(nev));
            format(SQL_Input,sizeof(SQL_Input),\"SELECT darab,type FROM `inventory` WHERE `itemname` = \'%s\'\", itemnev);
     mysql_query(SQLHandle, SQL_Input);
   new db,type;
    db = cache_get_field_content_int(0, \"darab\");
    type = cache_get_field_content_int(0, \"type\");
    new S[128];
    if(type == 0)
    {
        format(S,sizeof(S),\"elkezd enni egy %s-t.\",itemnev);
        cmd_me(playerid,S);
        ApplyAnimation(playerid, \"FOOD\", \"EAT_Pizza\",4.1,0,1,1,0,0);
        if(db-1 >= 1)
       {
          format(SQL_Input,sizeof(SQL_Input),\"UPDATE inventory SET darab = %d WHERE kinek = \'%s\' AND itemname = \'%s\'\",db-1,GetName(playerid),itemnev);
            mysql_tquery(SQLHandle, SQL_Input);
            }
            if(db-1 == 0)
            {
               format(SQL_Input, sizeof(SQL_Input), \"DELETE FROM `inventory` WHERE `kinek` = \'%s\' AND `itemname` = \'%s\'\", GetName(playerid),itemnev);
         mysql_tquery(SQLHandle, SQL_Input);
            }
       
    }
    else if(type == 1)
    {
        format(S,sizeof(S),\"elkezd inni egy %s-t.\",itemnev);
        cmd_me(playerid,S);
        ApplyAnimation(playerid, \"VENDING\", \"VEND_Drink2_P\",4.1,0,1,1,0,0);
        if(db-1 >= 1)
       {
          format(SQL_Input,sizeof(SQL_Input),\"UPDATE inventory SET darab = %d WHERE kinek = \'%s\' AND itemname = \'%s\'\",db-1,GetName(playerid),itemnev);
            mysql_tquery(SQLHandle, SQL_Input);
            }
            if(db-1 == 0)
            {
               format(SQL_Input, sizeof(SQL_Input), \"DELETE FROM `inventory` WHERE `kinek` = \'%s\' AND `itemname` = \'%s\'\", GetName(playerid),itemnev);
         mysql_tquery(SQLHandle, SQL_Input);
            }
       }
    else if(type == 2)
    {
        format(S,sizeof(S),\"rágyujt egy %s cigarettára.\",itemnev);
        cmd_me(playerid,S);
        SetPlayerSpecialAction(playerid, SPECIAL_ACTION_SMOKE_CIGGY);
        if(db-1 >= 1)
       {
          format(SQL_Input,sizeof(SQL_Input),\"UPDATE inventory SET darab = %d WHERE kinek = \'%s\' AND itemname = \'%s\'\",db-1,GetName(playerid),itemnev);
            mysql_tquery(SQLHandle, SQL_Input);
            }
            if(db-1 == 0)
            {
               format(SQL_Input, sizeof(SQL_Input), \"DELETE FROM `inventory` WHERE `kinek` = \'%s\' AND `itemname` = \'%s\'\", GetName(playerid),itemnev);
         mysql_tquery(SQLHandle, SQL_Input);
            }
    }
    else if(type == 3)
    {
        format(S,sizeof(S),\"rágyujt egy tekert cigarettára.\",itemnev);
        cmd_me(playerid,S);
        SetPlayerSpecialAction(playerid, SPECIAL_ACTION_SMOKE_CIGGY);
        SetPlayerWeather(playerid,700);
        if(db-1 >= 1)
       {
          format(SQL_Input,sizeof(SQL_Input),\"UPDATE inventory SET darab = %d WHERE kinek = \'%s\' AND itemname = \'%s\'\",db-1,GetName(playerid),itemnev);
            mysql_tquery(SQLHandle, SQL_Input);
            }
            if(db-1 == 0)
            {
               format(SQL_Input, sizeof(SQL_Input), \"DELETE FROM `inventory` WHERE `kinek` = \'%s\' AND `itemname` = \'%s\'\", GetName(playerid),itemnev);
         mysql_tquery(SQLHandle, SQL_Input);
            }
    }
    else if(type == 4)
    {
        if(Ugyanaz(itemnev,\"Golfütő\"))
        {
            format(S,sizeof(S),\"előveszi a %s-t.\",itemnev);
           cmd_me(playerid,S);
           GivePlayerWeapon(playerid,2,1);
           format(SQL_Input, sizeof(SQL_Input), \"DELETE FROM `inventory` WHERE `kinek` = \'%s\' AND `itemname` = \'%s\'\", GetName(playerid),itemnev);
         mysql_tquery(SQLHandle, SQL_Input);
           
        }
    }
         }
}
return 1;
}

 
Tábla:
 

CREATE TABLE IF NOT EXISTS `inventory` (
  `DBID` int(11) NOT NULL AUTO_INCREMENT,
  `itemname` varchar(128) NOT NULL,
  `darab` int(11) NOT NULL,
  `kinek` varchar(32) NOT NULL,
  `type` int(11) NOT NULL,
  PRIMARY KEY (`DBID`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=15 ;

 
Ha bármi gond van írjatok és segítek.
« Utoljára szerkesztve: 2016. Június 24. - 00:59:00 írta anGeL »

Nem elérhető 1Mark6

  • 437
    • Profil megtekintése
[MYSQL] Inventory rendszer(0.1)
« Válasz #1 Dátum: 2016. Június 23. - 17:33:02 »
+1
Kissé összekuszált, de nagyon jó rendszer lesz belőle, én például, úgy oldanám meg, hogy amikor itemet választ,
 
if(listitem == 0) // Használat
{
    TargyHasznalat(playerid,itemnev);
}
TargyHasznalat(playerid,nev[])
{
   if(!strcmp(nev,\"Kaja\"))
   {
      SCM(playerid,\"Megettél egy kenyeret\");
   }
}

 
Persze ez úgyanúgy müködik mint a tied, csupán annyi, hogy nem a dialog részedbe irod bele :D
És esetleg csinálhatnál saját lekérdezéseket is, így nemkellene mindenhol megcsinálnod.
pl. :
GetItemDarab(playerid,nev);
GetItemTipus(playerid,nev);

 
Valami ilyesmik, de szintén ezis  csak könnyíti a munkádat, és szintaktikailag nézz ki jobban.
Ezeket tudnám neked ajánlani, sok sikert a tovább fejlesztéshez, én mindenképpen támogatlak ebben :D

Nem elérhető ZyZu.

  • Globális moderátor
  • 8939
  • my turbo diesel forum
  • Discord: ZyZu.
    • Profil megtekintése
[MYSQL] Inventory rendszer(0.1)
« Válasz #2 Dátum: 2016. Június 23. - 18:24:46 »
+1
nagyon klassz egy kezdő inventory rendszer elkezdéséhez, szép munka. Illetve el ne felejtsd ezeket beilleszteni a kód elejére, sokan fognak panaszkodni, hogy miért hibás a kódod.. :D
 

#include a_samp
#include a_mysql
#include zcmd
#include sscanf2

[MYSQL] Inventory rendszer(0.1)
« Válasz #3 Dátum: 2016. Június 23. - 21:44:04 »
0
Idézetet írta: ƒeheristi97 date=1466699086\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"60972\" data-ipsquote-contentclass=\"forums_Topic
nagyon klassz egy kezdő inventory rendszer elkezdéséhez, szép munka. Illetve el ne felejtsd ezeket beilleszteni a kód elejére, sokan fognak panaszkodni, hogy miért hibás a kódod.. :D
 

#include a_samp
#include a_mysql
#include zcmd
#include sscanf2

 

Köszönöm, igen ezt kihagytam, de szerintem aki már MYSQL-el elkezd foglalkozni, az alapból rájön,hogy ezek kellenek oda... viszont, hogy félreértések ne essenek beszúrom :)

Dupla hozzászólás automatikusan összefûzve. ( 2016. Június 23. - 21:45:10 )


Kissé összekuszált, de nagyon jó rendszer lesz belőle, én például, úgy oldanám meg, hogy amikor itemet választ,
 
if(listitem == 0) // Használat
{
    TargyHasznalat(playerid,itemnev);
}
TargyHasznalat(playerid,nev[])
{
   if(!strcmp(nev,\"Kaja\"))
   {
      SCM(playerid,\"Megettél egy kenyeret\");
   }
}

 
Persze ez úgyanúgy müködik mint a tied, csupán annyi, hogy nem a dialog részedbe irod bele :D
És esetleg csinálhatnál saját lekérdezéseket is, így nemkellene mindenhol megcsinálnod.
pl. :
GetItemDarab(playerid,nev);
GetItemTipus(playerid,nev);

 
Valami ilyesmik, de szintén ezis  csak könnyíti a munkádat, és szintaktikailag nézz ki jobban.
Ezeket tudnám neked ajánlani, sok sikert a tovább fejlesztéshez, én mindenképpen támogatlak ebben :D
 
[/quote]
Köszönöm.
Igen-igen erre én is gondoltam, viszont 10.000 sor  után már nem átlátható, ugrálni kell ide-oda.

[MYSQL] Inventory rendszer(0.1)
« Válasz #4 Dátum: 2016. Június 23. - 22:54:01 »
+2
Igazad van!
Viszont ha egy módot stabil alapokra teszel akkor később nem kell aggódni ilyesmiért :)
A saját módodat pedig úgyis csak neked kell értened :)

[MYSQL] Inventory rendszer(0.1)
« Válasz #5 Dátum: 2016. Június 24. - 12:43:49 »
0
Idézetet írta: Kyosuke_Hiroshi date=1466715241\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"60972\" data-ipsquote-contentclass=\"forums_Topic
Igazad van!
Viszont ha egy módot stabil alapokra teszel akkor később nem kell aggódni ilyesmiért :)
A saját módodat pedig úgyis csak neked kell értened :)
 
Én mindig is úgy voltam vele, hogy nekem legyen átlátható, én értsem meg. Persze mindig meglehet oldani gazdaságosabban, rövidebben, jobban, de nekem valahogy így a legátláthatóbb.

[MYSQL] Inventory rendszer(0.1)
« Válasz #6 Dátum: 2016. Június 24. - 13:11:24 »
+1
Jól hangzik, gratulálok!

[MYSQL] Inventory rendszer(0.1)
« Válasz #7 Dátum: 2016. Június 24. - 14:32:19 »
0
Idézetet írta: blackdog476 date=1466766684\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"60972\" data-ipsquote-contentclass=\"forums_Topic
Jól hangzik, gratulálok!
 
Köszönöm :) :kosz:

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal