hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2024.03.28. 19:56



Jelenlévő felhasználók

Jelenleg 254 felhasználó van jelen :: 0 regisztrált, 0 rejtett és 254 vendég

A legtöbb felhasználó (1565 fő) 2020.11.21. 11:26-kor tartózkodott itt.

Regisztrált felhasználók: nincs regisztrált felhasználó az elmúlt 5 percben aktív felhasználók alapján

Utoljára aktív
Ahhoz hogy lásd ki volt utoljára aktív, be kell jelentkezned.



Az oldal teljeskörű
használatához regisztrálj.

Regisztráció

Kereső


Új téma nyitása  Hozzászólás a témához  [ 8 hozzászólás ] 
Szerző Üzenet
 Hozzászólás témája: SQL Piac
HozzászólásElküldve: 2015.06.19. 16:55 
Offline
Őskövület
Avatar

Csatlakozott: 2012.02.27. 09:42
Hozzászólások: 2588
Megköszönt másnak: 25 alkalommal
Megköszönték neki: 418 alkalommal
Sziasztok

Mivel látom, hogy elég sokan érdeklődnek a piac után ezért gondoltam kiragadok egy részletet a sajátomból és megosztom veletek. Azért írok inkább tutoriálnak mert a plugin jelenlegi formájában felhasználása nem alkalmas, nem azért mert nem működik hanem azért mert rengeteg részlet van amit nem írtam meg és csak a piaccal foglalkoztam a hozzá kellő fegyverek, arany stb. csak úgy szerepel benne, hogy belépéskor oda adja neki. Nem fogok mindent elmagyarázni sőt igazából semmit csak lépések szerint csoportosítom a forráskódot.

Akkor kezdjük is el.

Változók létrehozása SQL kapcsolódási adatok megadása
SMA Forráskód: [ Mindet kijelol ]
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <sqlx>
  4.  
  5. #define PLUGIN "New Plug-In"
  6. #define VERSION "1.0"
  7. #define AUTHOR "author"
  8.  
  9. new eladoname[64], arany[32], valasztottfegyverid
  10.  
  11. new Handle:g_SqlTuple
  12. new Host[] = "localhost"
  13. new User[] = "user"
  14. new Pass[] = "pass"
  15. new Db[] = "dbname"


2. Hozzunk létre 1 tömböt amik a fegyverek nevét tartalmazzák később a tömbben elfoglalt helye lesz a fegyver azonosítója
SMA Forráskód: [ Mindet kijelol ]
  1. #define MAXFEGYO 51
  2. new const FEGYVERNEV[MAXFEGYO+1][] = {
  3. "Alap fegyverek",
  4. "Fegyver 2",
  5. "Fegyver 3",
  6. "Fegyver 4",
  7. "Fegyver 5",
  8. "Fegyver 6",
  9. "Fegyver 7",
  10. "Fegyver 8",
  11. "Fegyver 9",
  12. "Fegyver 10",
  13. "Fegyver 11",
  14. "Fegyver 12",
  15. "Fegyver 13",
  16. "Fegyver 14",
  17. "Fegyver 15",
  18. "Fegyver 16",
  19. "Fegyver 17",
  20. "Fegyver 18",
  21. "Fegyver 19",
  22. "Fegyver 20",
  23. "Fegyver 21",
  24. "Fegyver 22",
  25. "Fegyver 23",
  26. "Fegyver 24",
  27. "Fegyver 25",
  28. "Fegyver 26",
  29. "Fegyver 27",
  30. "Fegyver 28",
  31. "Fegyver 29",
  32. "Fegyver 30",
  33. "Fegyver 31",
  34. "Fegyver 32",
  35. "Fegyver 33",
  36. "Fegyver 34",
  37. "Fegyver 35",
  38. "Fegyver 36",
  39. "Fegyver 37",
  40. "Fegyver 38",
  41. "Fegyver 39",
  42. "Fegyver 40",
  43. "Fegyver 41",
  44. "Fegyver 42",
  45. "Fegyver 43",
  46. "Fegyver 44",
  47. "Fegyver 45",
  48. "Fegyver 46",
  49. "Fegyver 47",
  50. "Fegyver 48",
  51. "Fegyver 49",
  52. "Fegyver 50",
  53. "Fegyver 51",
  54. "Fegyver 52"
  55. }

3. Regisztráljunk pár parancsot amivel megtudjuk hívni a piac eladás, vásárlás részét illetve egy AR parancsot amivel megtudjuk majd adni az eladni kívánt tárgy árát és végül meghívjuk az SQL kapcsolódást és tábla készítést is.
SMA Forráskód: [ Mindet kijelol ]
  1. public plugin_init() {
  2. register_plugin(PLUGIN, VERSION, AUTHOR)
  3.  
  4. register_clcmd("say /piacv", "piacvasarlas")
  5. register_clcmd("say /piaca", "piaceladas")
  6. register_clcmd("AR", "cmdar")
  7. register_clcmd("say /add", "aranya")
  8.  
  9. makeTuple()
  10. createTable()
  11. }


4. Kapcsolódjunk az adatbázisunkhoz és gondoljuk át, hogy milyen táblákra lesz szükségünk. Először is kell 1 tábla ami a usereket tartalmazza legyen user (itt ugye username arany stb.. jelen esetben csak ez a 2 van de bővíthető jelszóval illetve több fizető eszközzel szándékosan nem írtam bele regrendszert.) kell nekünk egy tábla ami tárolja azt, hogy X usernek milyen fegyverei vannak, legyen a táblánk neve fegyverek. Kell egy harmadik tábla is ami tárolja azt, hogy a piacon ki mit és mennyiért ad el tárgyakat, legyen ez a piac tábla.
SMA Forráskód: [ Mindet kijelol ]
  1. public makeTuple()
  2. {
  3. g_SqlTuple = SQL_MakeDbTuple(Host,User,Pass,Db)
  4. }
  5. public createTable()
  6. {
  7.  
  8. SQL_ThreadQuery(g_SqlTuple,"createTableThread", "CREATE TABLE IF NOT EXISTS users (username varchar(32), arany INT(11))");
  9. SQL_ThreadQuery(g_SqlTuple,"createTableThread", "CREATE TABLE IF NOT EXISTS fegyverek (username varchar(32), itemid INT(11) )")
  10. SQL_ThreadQuery(g_SqlTuple,"createTableThread", "CREATE TABLE IF NOT EXISTS piac (eladoname varchar(32), itemid INT(11), ar INT(11) )")
  11. }
  12. public createTableThread(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
  13. {
  14. if(FailState == TQUERY_CONNECT_FAILED)
  15. return set_fail_state("Nem tudtam csatlakozni az adatbazishoz.")
  16. else if(FailState == TQUERY_QUERY_FAILED)
  17. return set_fail_state("Elbasztal valamit.")
  18.  
  19. if(Errcode)
  20. return log_amx("Hibat dobtam: %s",Error)
  21.  
  22. return PLUGIN_CONTINUE
  23. }

 
5. Most már meg van a 3 táblánk. Már csak azt kellene eldönteni, hogy a felcsatlakozó játékos szerepel -e a user táblában. Ehhez szükségünk van a csatlakozás eventre illetve 2 query re. Az első query egy ellenőrzés lesz, lekérünk minden adatok a users táblából, de csak azokat ahol a username megegyezik a játékosunk nevével. Utána meg kell néznünk, hogy van -e találat, ha van akkor adjuk neki oda a jól megérdemelt aranyát ha pedig nincs akkor hozzunk létre neki egy új sort. A játékos csatlakozáskor ha nem található az adatbázisban alapból kap 100 aranyat és a 12. számú fegyvert a tömbünkből.
SMA Forráskód: [ Mindet kijelol ]
  1. public client_putinserver(id)
  2. {
  3. new ErrorCode
  4. new Error[512]
  5. new Handle:SqlConnection = SQL_Connect(g_SqlTuple, ErrorCode, Error, 511)
  6.  
  7. if(SqlConnection == Empty_Handle)
  8. {
  9. set_fail_state(Error)
  10. }
  11. new nev[32]
  12. get_user_name(id, nev, 31)
  13. new Handle:Check = SQL_PrepareQuery(SqlConnection, "SELECT * FROM users WHERE username = '%s'", nev)
  14. if(!SQL_Execute(Check))
  15. {
  16. SQL_QueryError(Check, Error, 511)
  17. set_fail_state(Error)
  18. }
  19. if(SQL_NumRows(Check) > 0)
  20. {
  21. new a = SQL_FieldNameToNum(Check, "arany")
  22. arany[id] = SQL_ReadResult(Check, a)
  23. }
  24. else {
  25. new Handle:Query = SQL_PrepareQuery(SqlConnection, "INSERT INTO users (username, arany) VALUES ('%s', '100')", nev)
  26. new Handle:Query2 = SQL_PrepareQuery(SqlConnection, "INSERT INTO fegyverek (username, itemid) VALUES ('%s', '12')", nev)
  27. if(!SQL_Execute(Query) || !SQL_Execute(Query2))
  28. {
  29. SQL_QueryError(Query, Error, 511)
  30. SQL_QueryError(Query2, Error, 511)
  31. set_fail_state(Error)
  32. }
  33. SQL_FreeHandle(Query)
  34. }
  35. SQL_FreeHandle(Check)
  36. SQL_FreeHandle(SqlConnection)
  37. }

6. Ezek után nincs is más dolgunk mint megírni a piacot. Érdemes az eladás részével kezdeni a dolgot. Lássuk ehhez mi is kell. Szeretnénk egy menüt ami megtalálja a mi fegyvereinket és eladhatóvá teszi nekünk. Ez látható a lenti forráskódban. Ahhoz, hogy megtalálja a fegyvereinket ismét szükség van 1 lekérdezésre ami kiolvassa azokat a fegyvereket a fegyver táblából ahol a tulajdonosok mi vagyunk tehát username = nev. Ezen kívül meg kell néznünk azt is, hogy van -e egyáltalán fegyverünk. Mivel menüt csinálunk üssünk 2 legyet egy csapásra használjunk for ciklust. Ha nincs fegyverünk akkor a for ciklus érvényét veszti mivel a 2. feltételünk az, hogy az X nek kisebbnek kell lennie mint a találatok számának. Miután megvannak a fegyvereink le kell kérnünk a nevüket. Mivel mi itemid-t használtunk és feljebb említettem, hogy a fegyver azonosítója az a tömbben elfoglalt helyével egyenlő nincs is más dolgunk mint lekérni a tömb X. elemét. Ezek után valahogy le kell kérnünk, hogy melyik fegyvert választottunk és árat kell adni neki (handler ben található). Figyelni kell arra is, hogy a felhasználóknak van egy alap fegyvere. Ezt ki kell hagynunk a listázásból ha a tömb elejére rakod akkor a 0. helyet foglalja el ergó az azonosítója ami mi használunk 0 lesz ezért egy egyszerű if függvénnyel kiszűrhető.

SMA Forráskód: [ Mindet kijelol ]
  1. public piaceladas(id)
  2. {
  3. new szTemp[512]
  4. formatex(szTemp, charsmax(szTemp), "\yPiac \w[ELADÁS] %d arany ^n\rVálaszd ki a fegyvert!", arany[id])
  5. new menu = menu_create(szTemp, "piaceladasmenuhandler");
  6. new szTempid[10],tempid
  7.  
  8. new ErrorCode
  9. new Error[512]
  10. new Handle:SqlConnection = SQL_Connect(g_SqlTuple, ErrorCode, Error, 511)
  11. if(SqlConnection == Empty_Handle)
  12. {
  13. set_fail_state(Error)
  14. }
  15. new nev[32]
  16. get_user_name(id, nev, 31)
  17. new Handle:Kveri = SQL_PrepareQuery(SqlConnection, "SELECT * FROM fegyverek WHERE username='%s'", nev)
  18. if(!SQL_Execute(Kveri) )
  19. {
  20. SQL_QueryError(Kveri, Error, 511)
  21. set_fail_state(Error)
  22.  
  23. }
  24.  
  25.  
  26. for(new x=1; x<=SQL_NumRows(Kveri); x++)
  27. {
  28. tempid = SQL_ReadResult(Kveri, SQL_FieldNameToNum(Kveri, "itemid"))
  29. SQL_NextRow(Kveri)
  30. num_to_str(tempid, szTempid, charsmax(szTempid));
  31. if(tempid != 0)
  32. menu_additem(menu, FEGYVERNEV[tempid], szTempid, 0);
  33. }
  34. SQL_FreeHandle(Kveri)
  35. SQL_FreeHandle(SqlConnection)
  36. menu_display(id, menu, 0)
  37. }
  38. public piaceladasmenuhandler(id, menu, item)
  39. {
  40. if(item == MENU_EXIT)
  41. {
  42. menu_destroy(menu);
  43. return PLUGIN_HANDLED;
  44. }
  45.  
  46. new data[6], szName[64]
  47. new access, callback;
  48.  
  49. menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);
  50.  
  51. valasztottfegyverid = str_to_num(data);
  52. client_cmd(id, "messagemode AR")
  53. menu_destroy(menu);
  54.  
  55. return PLUGIN_HANDLED;
  56. }

 
7. Már megvan, hogy melyik fegyvert választottuk és mennyit szeretnénk kapni érte. Most már csak annyi dolgunk van, hogy az eladót a tárgy azonosítóját és az árát beletegyük a piac táblába és elvegyük az eladótól.

SMA Forráskód: [ Mindet kijelol ]
  1. public cmdar(id)
  2. {
  3. new ertek[121]
  4. read_args(ertek, charsmax(ertek))
  5. remove_quotes(ertek)
  6. str_to_num(ertek)
  7.  
  8. new ErrorCode
  9. new Error[512]
  10. new Handle:SqlConnection = SQL_Connect(g_SqlTuple, ErrorCode, Error, 511)
  11. if(SqlConnection == Empty_Handle)
  12. {
  13. set_fail_state(Error)
  14. }
  15. new nev[32]
  16. get_user_name(id, nev, 31)
  17. new Handle:Qvery = SQL_PrepareQuery(SqlConnection, "INSERT INTO piac VALUES('%s', '%d', '%s')",nev,valasztottfegyverid,ertek )
  18. new Handle:Qverydelete = SQL_PrepareQuery(SqlConnection, "DELETE FROM `fegyverek` WHERE `username` = '%s' AND `itemid` = '%d'",nev,valasztottfegyverid)
  19. if(!SQL_Execute(Qvery) )
  20. {
  21. SQL_QueryError(Qvery, Error, 511)
  22. set_fail_state(Error)
  23.  
  24. }
  25. else if(!SQL_Execute(Qverydelete) )
  26. {
  27. SQL_QueryError(Qverydelete, Error, 511)
  28. set_fail_state(Error)
  29.  
  30. }
  31. SQL_FreeHandle(Qvery)
  32. SQL_FreeHandle(Qverydelete)
  33. SQL_FreeHandle(SqlConnection)
  34. }

 
8. Az eladásra kívánt fegyver benne van a piac táblában már csak a vásárló menüre vár. Először is a menübe ki kell listázni az eladásra kínált fegyvereket. Itt ismét a for ciklust használjuk, mert ha nincs fegyver akkor nem fog megjelenni a menü ami nekünk tökéletes. Ha már megvan, hogy melyik fegyvert szeretnénk megvenni akkor nincs más dolgunk mint ellenőrizni, hogy van -e elég pénzünk rá és oda adni a fegyvert az új tulajának az aranyat az eladónak és levonni az árát a vevő pénzéből. Ehhez érdemes stock ot használni főleg ha kibővíted a plugint (9. lépés). Illetve ne feledkezzünk meg arról sem, hogy az adatokat újra be kell tölteni a felhasználóknak, hogy valós értékeket lássanak.

SMA Forráskód: [ Mindet kijelol ]
  1. public piacvasarlas(id)
  2. {
  3. new szTemp[512],temptwo[512]
  4. formatex(szTemp, charsmax(szTemp), "\yPiac \w[VÁSÁRLÁS] %d arany^n\rVálaszd ki a fegyvert!",arany[id])
  5. new menu = menu_create(szTemp, "piacvasarlasmenuhandler");
  6. new szTempid[10]
  7.  
  8. new ErrorCode
  9. new Error[512]
  10. new Handle:SqlConnection = SQL_Connect(g_SqlTuple, ErrorCode, Error, 511)
  11. if(SqlConnection == Empty_Handle)
  12. {
  13. set_fail_state(Error)
  14. }
  15. new Handle:Kveri = SQL_PrepareQuery(SqlConnection, "SELECT * FROM `piac`")
  16. if(!SQL_Execute(Kveri) )
  17. {
  18. SQL_QueryError(Kveri, Error, 511)
  19. set_fail_state(Error)
  20.  
  21. }
  22.  
  23.  
  24. for(new x=1; x<=SQL_NumRows(Kveri); x++)
  25. {
  26. new elado = SQL_FieldNameToNum(Kveri, "eladoname")
  27.  
  28. new tempid = SQL_ReadResult(Kveri, SQL_FieldNameToNum(Kveri, "itemid"))
  29. new ara = SQL_ReadResult(Kveri, SQL_FieldNameToNum(Kveri, "ar"))
  30. SQL_ReadResult(Kveri, elado, eladoname, sizeof(eladoname)-1);
  31. SQL_NextRow(Kveri)
  32. num_to_str(tempid, szTempid, charsmax(szTempid));
  33. formatex(temptwo, charsmax(temptwo), "\rEladó: \w %s | \y%s | \rÁra: \y %d",eladoname, FEGYVERNEV[tempid],ara)
  34. menu_additem(menu, temptwo, szTempid, 0);
  35.  
  36. }
  37. SQL_FreeHandle(Kveri)
  38. SQL_FreeHandle(SqlConnection)
  39. menu_display(id, menu, 0)
  40. }
  41. public piacvasarlasmenuhandler(id,menu,item)
  42. {
  43. if(item == MENU_EXIT)
  44. {
  45. menu_destroy(menu);
  46. return PLUGIN_HANDLED;
  47. }
  48.  
  49. new data[6], szName[64]
  50. new access, callback;
  51.  
  52. menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);
  53. valasztottfegyverid = str_to_num(data);
  54.  
  55.  
  56. new ErrorCode
  57. new Error[512]
  58. new Handle:SqlConnection = SQL_Connect(g_SqlTuple, ErrorCode, Error, 511)
  59. if(SqlConnection == Empty_Handle)
  60. {
  61. set_fail_state(Error)
  62. }
  63. new Handle:Kveri = SQL_PrepareQuery(SqlConnection, "SELECT * FROM `piac` WHERE itemid = '%d' AND eladoname = '%s'",valasztottfegyverid, eladoname )
  64. if(!SQL_Execute(Kveri) )
  65. {
  66. SQL_QueryError(Kveri, Error, 511)
  67. set_fail_state(Error)
  68.  
  69. }
  70. new eladasiar = SQL_ReadResult(Kveri, SQL_FieldNameToNum(Kveri, "ar"))
  71.  
  72. SQL_FreeHandle(Kveri)
  73. SQL_FreeHandle(SqlConnection)
  74. new nev[32]
  75. get_user_name(id, nev, 31)
  76. if(arany[id] >= eladasiar)
  77. {
  78. aranypiac(eladoname, nev ,valasztottfegyverid, eladasiar)
  79. }
  80. ReloadData(id)
  81. menu_destroy(menu);
  82.  
  83. return PLUGIN_HANDLED;
  84. }

 
9. Egy egyszerű stock ami lekérdezi az eladó, a vevő aranyát és elvégzi a megfelelő műveleteket illetve törli a piacról a fegyver, oda adja a vevőnek.
SMA Forráskód: [ Mindet kijelol ]
  1. stock aranypiac(const eladoname[],const vevoname[], const fid, const ar)
  2. {
  3.  
  4. new ErrorCode
  5. new Error[512]
  6. new Handle:SqlConnection = SQL_Connect(g_SqlTuple, ErrorCode, Error, 511)
  7. /*eladó infó*/
  8. if(SqlConnection == Empty_Handle)
  9. {
  10. set_fail_state(Error)
  11. }
  12. new Handle:Query = SQL_PrepareQuery(SqlConnection, "SELECT * FROM users WHERE username='%s'", eladoname)
  13. if(!SQL_Execute(Query) )
  14. {
  15. SQL_QueryError(Query, Error, 511)
  16. set_fail_state(Error)
  17.  
  18. }
  19.  
  20. new one = SQL_FieldNameToNum(Query, "arany")
  21. new eladoaranya = SQL_ReadResult(Query, one)
  22. /*vevő infó*/
  23. new Handle:Queryvevo = SQL_PrepareQuery(SqlConnection, "SELECT * FROM users WHERE username='%s'", vevoname)
  24. if(!SQL_Execute(Queryvevo) )
  25. {
  26. SQL_QueryError(Queryvevo, Error, 511)
  27. set_fail_state(Error)
  28.  
  29. }
  30. new two = SQL_FieldNameToNum(Queryvevo, "arany")
  31. new vevoaranya = SQL_ReadResult(Queryvevo, two)
  32. /*Fegyver adása a vevőnek*/
  33. new Handle:Queryadas = SQL_PrepareQuery(SqlConnection, "INSERT INTO `fegyverek`(`username`, `itemid`) VALUES ('%s','%d')", vevoname, fid)
  34. if(!SQL_Execute(Queryadas) )
  35. {
  36. SQL_QueryError(Queryadas, Error, 511)
  37. set_fail_state(Error)
  38.  
  39. }
  40. /*Arany odaadása az eladónak*/
  41. new eladoarany = eladoaranya+=ar
  42. client_print(0, print_chat, "EA: %d", eladoarany)
  43. new Handle:Queryaranyadas = SQL_PrepareQuery(SqlConnection, "UPDATE `users` SET `arany` = '%d' WHERE `username` = '%s'",eladoarany, eladoname)
  44. if(!SQL_Execute(Queryaranyadas) )
  45. {
  46. SQL_QueryError(Queryaranyadas, Error, 511)
  47. set_fail_state(Error)
  48.  
  49. }
  50. /*Arany elvétele a vevőtől*/
  51. new vevoujaranya = vevoaranya -=ar
  52. client_print(0, print_chat, "VA: %d", vevoujaranya)
  53. new Handle:Queryaranyelvetel = SQL_PrepareQuery(SqlConnection, "UPDATE `users` SET `arany` = '%d' WHERE `username` = '%s'", vevoujaranya, vevoname)
  54. if(!SQL_Execute(Queryaranyelvetel) )
  55. {
  56. SQL_QueryError(Queryaranyelvetel, Error, 511)
  57. set_fail_state(Error)
  58.  
  59. }
  60. /*Fegyver törlés a piactól*/
  61. new Handle:Querytorol = SQL_PrepareQuery(SqlConnection, "DELETE FROM `piac` WHERE `eladoname` = '%s' AND `itemid` = '%d'", eladoname, fid)
  62. if(!SQL_Execute(Querytorol) )
  63. {
  64. SQL_QueryError(Querytorol, Error, 511)
  65. set_fail_state(Error)
  66.  
  67. }
  68. SQL_FreeHandle(Query)
  69. SQL_FreeHandle(Queryvevo)
  70. SQL_FreeHandle(Querytorol)
  71. SQL_FreeHandle(Queryadas)
  72. SQL_FreeHandle(Queryaranyadas)
  73. SQL_FreeHandle(Queryaranyelvetel)
  74. SQL_FreeHandle(SqlConnection)
  75. }

10. Végeztünk mindennel már csak egy dolog van hátra az adatok újra betöltése

SMA Forráskód: [ Mindet kijelol ]
  1. public ReloadData(id)
  2. {
  3. new ErrorCode
  4. new Error[512]
  5. new Handle:SqlConnection = SQL_Connect(g_SqlTuple, ErrorCode, Error, 511)
  6.  
  7. if(SqlConnection == Empty_Handle)
  8. {
  9. set_fail_state(Error)
  10. }
  11. new nev[32]
  12. get_user_name(id, nev, 31)
  13. new Handle:Query = SQL_PrepareQuery(SqlConnection, "SELECT * FROM users WHERE username='%s'", nev)
  14. if(!SQL_Execute(Query) )
  15. {
  16. SQL_QueryError(Query, Error, 511)
  17. set_fail_state(Error)
  18.  
  19. }
  20. new one = SQL_FieldNameToNum(Query, "arany")
  21.  
  22. arany[id] = SQL_ReadResult(Query, one)
  23. SQL_FreeHandle(Query)
  24. SQL_FreeHandle(SqlConnection)
  25.  
  26. }

 
Teljes forráskód:
SMA Forráskód: [ Mindet kijelol ]
  1. /* Plugin generated by AMXX-Studio */
  2.  
  3. #include <amxmodx>
  4. #include <amxmisc>
  5. #include <sqlx>
  6.  
  7. #define PLUGIN "New Plug-In"
  8. #define VERSION "1.0"
  9. #define AUTHOR "author"
  10.  
  11. new eladoname[64], arany[32], valasztottfegyverid
  12.  
  13. new Handle:g_SqlTuple
  14. new Host[] = "localhost"
  15. new User[] = "user"
  16. new Pass[] = "pass"
  17. new Db[] = "dbname"
  18. #define MAXFEGYO 51
  19. new const FEGYVERNEV[MAXFEGYO+1][] = {
  20. "Alap fegyverek",
  21. "Fegyver 2",
  22. "Fegyver 3",
  23. "Fegyver 4",
  24. "Fegyver 5",
  25. "Fegyver 6",
  26. "Fegyver 7",
  27. "Fegyver 8",
  28. "Fegyver 9",
  29. "Fegyver 10",
  30. "Fegyver 11",
  31. "Fegyver 12",
  32. "Fegyver 13",
  33. "Fegyver 14",
  34. "Fegyver 15",
  35. "Fegyver 16",
  36. "Fegyver 17",
  37. "Fegyver 18",
  38. "Fegyver 19",
  39. "Fegyver 20",
  40. "Fegyver 21",
  41. "Fegyver 22",
  42. "Fegyver 23",
  43. "Fegyver 24",
  44. "Fegyver 25",
  45. "Fegyver 26",
  46. "Fegyver 27",
  47. "Fegyver 28",
  48. "Fegyver 29",
  49. "Fegyver 30",
  50. "Fegyver 31",
  51. "Fegyver 32",
  52. "Fegyver 33",
  53. "Fegyver 34",
  54. "Fegyver 35",
  55. "Fegyver 36",
  56. "Fegyver 37",
  57. "Fegyver 38",
  58. "Fegyver 39",
  59. "Fegyver 40",
  60. "Fegyver 41",
  61. "Fegyver 42",
  62. "Fegyver 43",
  63. "Fegyver 44",
  64. "Fegyver 45",
  65. "Fegyver 46",
  66. "Fegyver 47",
  67. "Fegyver 48",
  68. "Fegyver 49",
  69. "Fegyver 50",
  70. "Fegyver 51",
  71. "Fegyver 52"
  72. }
  73.  
  74. public plugin_init() {
  75. register_plugin(PLUGIN, VERSION, AUTHOR)
  76.  
  77. register_clcmd("say /piacv", "piacvasarlas")
  78. register_clcmd("say /piaca", "piaceladas")
  79. register_clcmd("AR", "cmdar")
  80. register_clcmd("say /add", "aranya")
  81.  
  82. makeTuple()
  83. createTable()
  84. }
  85. public aranya(id) arany[id] += 100000
  86. public client_putinserver(id)
  87. {
  88. new ErrorCode
  89. new Error[512]
  90. new Handle:SqlConnection = SQL_Connect(g_SqlTuple, ErrorCode, Error, 511)
  91.  
  92. if(SqlConnection == Empty_Handle)
  93. {
  94. set_fail_state(Error)
  95. }
  96. new nev[32]
  97. get_user_name(id, nev, 31)
  98. new Handle:Check = SQL_PrepareQuery(SqlConnection, "SELECT * FROM users WHERE username = '%s'", nev)
  99. if(!SQL_Execute(Check))
  100. {
  101. SQL_QueryError(Check, Error, 511)
  102. set_fail_state(Error)
  103. }
  104. if(SQL_NumRows(Check) > 0)
  105. {
  106. new a = SQL_FieldNameToNum(Check, "arany")
  107. arany[id] = SQL_ReadResult(Check, a)
  108. }
  109. else {
  110. new Handle:Query = SQL_PrepareQuery(SqlConnection, "INSERT INTO users (username, arany) VALUES ('%s', '100')", nev)
  111. new Handle:Query2 = SQL_PrepareQuery(SqlConnection, "INSERT INTO fegyverek (username, itemid) VALUES ('%s', '12')", nev)
  112. if(!SQL_Execute(Query) || !SQL_Execute(Query2))
  113. {
  114. SQL_QueryError(Query, Error, 511)
  115. SQL_QueryError(Query2, Error, 511)
  116. set_fail_state(Error)
  117. }
  118. SQL_FreeHandle(Query)
  119. }
  120. SQL_FreeHandle(Check)
  121. SQL_FreeHandle(SqlConnection)
  122. }
  123. public makeTuple()
  124. {
  125. g_SqlTuple = SQL_MakeDbTuple(Host,User,Pass,Db)
  126. }
  127. public createTable()
  128. {
  129.  
  130. SQL_ThreadQuery(g_SqlTuple,"createTableThread", "CREATE TABLE IF NOT EXISTS users (username varchar(32), arany INT(11))");
  131. SQL_ThreadQuery(g_SqlTuple,"createTableThread", "CREATE TABLE IF NOT EXISTS fegyverek (username varchar(32), itemid INT(11) )")
  132. SQL_ThreadQuery(g_SqlTuple,"createTableThread", "CREATE TABLE IF NOT EXISTS piac (eladoname varchar(32), itemid INT(11), ar INT(11) )")
  133. }
  134. public createTableThread(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
  135. {
  136. if(FailState == TQUERY_CONNECT_FAILED)
  137. return set_fail_state("Nem tudtam csatlakozni az adatbazishoz.")
  138. else if(FailState == TQUERY_QUERY_FAILED)
  139. return set_fail_state("Elbasztal valamit.")
  140.  
  141. if(Errcode)
  142. return log_amx("Hibat dobtam: %s",Error)
  143.  
  144. return PLUGIN_CONTINUE
  145. }
  146. public piaceladas(id)
  147. {
  148. new szTemp[512]
  149. formatex(szTemp, charsmax(szTemp), "\yPiac \w[ELADÁS] %d arany ^n\rVálaszd ki a fegyvert!", arany[id])
  150. new menu = menu_create(szTemp, "piaceladasmenuhandler");
  151. new szTempid[10],tempid
  152.  
  153. new ErrorCode
  154. new Error[512]
  155. new Handle:SqlConnection = SQL_Connect(g_SqlTuple, ErrorCode, Error, 511)
  156. if(SqlConnection == Empty_Handle)
  157. {
  158. set_fail_state(Error)
  159. }
  160. new nev[32]
  161. get_user_name(id, nev, 31)
  162. new Handle:Kveri = SQL_PrepareQuery(SqlConnection, "SELECT * FROM fegyverek WHERE username='%s'", nev)
  163. if(!SQL_Execute(Kveri) )
  164. {
  165. SQL_QueryError(Kveri, Error, 511)
  166. set_fail_state(Error)
  167.  
  168. }
  169.  
  170.  
  171. for(new x=1; x<=SQL_NumRows(Kveri); x++)
  172. {
  173. tempid = SQL_ReadResult(Kveri, SQL_FieldNameToNum(Kveri, "itemid"))
  174. SQL_NextRow(Kveri)
  175. num_to_str(tempid, szTempid, charsmax(szTempid));
  176. if(tempid != 0)
  177. menu_additem(menu, FEGYVERNEV[tempid], szTempid, 0);
  178. }
  179. SQL_FreeHandle(Kveri)
  180. SQL_FreeHandle(SqlConnection)
  181. menu_display(id, menu, 0)
  182. }
  183. public piaceladasmenuhandler(id, menu, item)
  184. {
  185. if(item == MENU_EXIT)
  186. {
  187. menu_destroy(menu);
  188. return PLUGIN_HANDLED;
  189. }
  190.  
  191. new data[6], szName[64]
  192. new access, callback;
  193.  
  194. menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);
  195.  
  196. valasztottfegyverid = str_to_num(data);
  197. client_cmd(id, "messagemode AR")
  198. menu_destroy(menu);
  199.  
  200. return PLUGIN_HANDLED;
  201. }
  202. public cmdar(id)
  203. {
  204. new ertek[121]
  205. read_args(ertek, charsmax(ertek))
  206. remove_quotes(ertek)
  207. str_to_num(ertek)
  208.  
  209. new ErrorCode
  210. new Error[512]
  211. new Handle:SqlConnection = SQL_Connect(g_SqlTuple, ErrorCode, Error, 511)
  212. if(SqlConnection == Empty_Handle)
  213. {
  214. set_fail_state(Error)
  215. }
  216. new nev[32]
  217. get_user_name(id, nev, 31)
  218. new Handle:Qvery = SQL_PrepareQuery(SqlConnection, "INSERT INTO piac VALUES('%s', '%d', '%s')",nev,valasztottfegyverid,ertek )
  219. new Handle:Qverydelete = SQL_PrepareQuery(SqlConnection, "DELETE FROM `fegyverek` WHERE `username` = '%s' AND `itemid` = '%d'",nev,valasztottfegyverid)
  220. if(!SQL_Execute(Qvery) )
  221. {
  222. SQL_QueryError(Qvery, Error, 511)
  223. set_fail_state(Error)
  224.  
  225. }
  226. else if(!SQL_Execute(Qverydelete) )
  227. {
  228. SQL_QueryError(Qverydelete, Error, 511)
  229. set_fail_state(Error)
  230.  
  231. }
  232. SQL_FreeHandle(Qvery)
  233. SQL_FreeHandle(Qverydelete)
  234. SQL_FreeHandle(SqlConnection)
  235. }
  236. public piacvasarlas(id)
  237. {
  238. new szTemp[512],temptwo[512]
  239. formatex(szTemp, charsmax(szTemp), "\yPiac \w[VÁSÁRLÁS] %d arany^n\rVálaszd ki a fegyvert!",arany[id])
  240. new menu = menu_create(szTemp, "piacvasarlasmenuhandler");
  241. new szTempid[10]
  242.  
  243. new ErrorCode
  244. new Error[512]
  245. new Handle:SqlConnection = SQL_Connect(g_SqlTuple, ErrorCode, Error, 511)
  246. if(SqlConnection == Empty_Handle)
  247. {
  248. set_fail_state(Error)
  249. }
  250. new Handle:Kveri = SQL_PrepareQuery(SqlConnection, "SELECT * FROM `piac`")
  251. if(!SQL_Execute(Kveri) )
  252. {
  253. SQL_QueryError(Kveri, Error, 511)
  254. set_fail_state(Error)
  255.  
  256. }
  257.  
  258.  
  259. for(new x=1; x<=SQL_NumRows(Kveri); x++)
  260. {
  261. new elado = SQL_FieldNameToNum(Kveri, "eladoname")
  262.  
  263. new tempid = SQL_ReadResult(Kveri, SQL_FieldNameToNum(Kveri, "itemid"))
  264. new ara = SQL_ReadResult(Kveri, SQL_FieldNameToNum(Kveri, "ar"))
  265. SQL_ReadResult(Kveri, elado, eladoname, sizeof(eladoname)-1);
  266. SQL_NextRow(Kveri)
  267. num_to_str(tempid, szTempid, charsmax(szTempid));
  268. formatex(temptwo, charsmax(temptwo), "\rEladó: \w %s | \y%s | \rÁra: \y %d",eladoname, FEGYVERNEV[tempid],ara)
  269. menu_additem(menu, temptwo, szTempid, 0);
  270.  
  271. }
  272. SQL_FreeHandle(Kveri)
  273. SQL_FreeHandle(SqlConnection)
  274. menu_display(id, menu, 0)
  275. }
  276. public piacvasarlasmenuhandler(id,menu,item)
  277. {
  278. if(item == MENU_EXIT)
  279. {
  280. menu_destroy(menu);
  281. return PLUGIN_HANDLED;
  282. }
  283.  
  284. new data[6], szName[64]
  285. new access, callback;
  286.  
  287. menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);
  288. valasztottfegyverid = str_to_num(data);
  289.  
  290.  
  291. new ErrorCode
  292. new Error[512]
  293. new Handle:SqlConnection = SQL_Connect(g_SqlTuple, ErrorCode, Error, 511)
  294. if(SqlConnection == Empty_Handle)
  295. {
  296. set_fail_state(Error)
  297. }
  298. new Handle:Kveri = SQL_PrepareQuery(SqlConnection, "SELECT * FROM `piac` WHERE itemid = '%d' AND eladoname = '%s'",valasztottfegyverid, eladoname )
  299. if(!SQL_Execute(Kveri) )
  300. {
  301. SQL_QueryError(Kveri, Error, 511)
  302. set_fail_state(Error)
  303.  
  304. }
  305. new eladasiar = SQL_ReadResult(Kveri, SQL_FieldNameToNum(Kveri, "ar"))
  306.  
  307. SQL_FreeHandle(Kveri)
  308. SQL_FreeHandle(SqlConnection)
  309. new nev[32]
  310. get_user_name(id, nev, 31)
  311. if(arany[id] >= eladasiar)
  312. {
  313. aranypiac(eladoname, nev ,valasztottfegyverid, eladasiar)
  314. }
  315. ReloadData(id)
  316. menu_destroy(menu);
  317.  
  318. return PLUGIN_HANDLED;
  319. }
  320. stock aranypiac(const eladoname[],const vevoname[], const fid, const ar)
  321. {
  322.  
  323. new ErrorCode
  324. new Error[512]
  325. new Handle:SqlConnection = SQL_Connect(g_SqlTuple, ErrorCode, Error, 511)
  326. /*eladó infó*/
  327. if(SqlConnection == Empty_Handle)
  328. {
  329. set_fail_state(Error)
  330. }
  331. new Handle:Query = SQL_PrepareQuery(SqlConnection, "SELECT * FROM users WHERE username='%s'", eladoname)
  332. if(!SQL_Execute(Query) )
  333. {
  334. SQL_QueryError(Query, Error, 511)
  335. set_fail_state(Error)
  336.  
  337. }
  338.  
  339. new one = SQL_FieldNameToNum(Query, "arany")
  340. new eladoaranya = SQL_ReadResult(Query, one)
  341. /*vevő infó*/
  342. new Handle:Queryvevo = SQL_PrepareQuery(SqlConnection, "SELECT * FROM users WHERE username='%s'", vevoname)
  343. if(!SQL_Execute(Queryvevo) )
  344. {
  345. SQL_QueryError(Queryvevo, Error, 511)
  346. set_fail_state(Error)
  347.  
  348. }
  349. new two = SQL_FieldNameToNum(Queryvevo, "arany")
  350. new vevoaranya = SQL_ReadResult(Queryvevo, two)
  351. /*Fegyver adása a vevőnek*/
  352. new Handle:Queryadas = SQL_PrepareQuery(SqlConnection, "INSERT INTO `fegyverek`(`username`, `itemid`) VALUES ('%s','%d')", vevoname, fid)
  353. if(!SQL_Execute(Queryadas) )
  354. {
  355. SQL_QueryError(Queryadas, Error, 511)
  356. set_fail_state(Error)
  357.  
  358. }
  359. /*Arany odaadása az eladónak*/
  360. new eladoarany = eladoaranya+=ar
  361. client_print(0, print_chat, "EA: %d", eladoarany)
  362. new Handle:Queryaranyadas = SQL_PrepareQuery(SqlConnection, "UPDATE `users` SET `arany` = '%d' WHERE `username` = '%s'",eladoarany, eladoname)
  363. if(!SQL_Execute(Queryaranyadas) )
  364. {
  365. SQL_QueryError(Queryaranyadas, Error, 511)
  366. set_fail_state(Error)
  367.  
  368. }
  369. /*Arany elvétele a vevőtől*/
  370. new vevoujaranya = vevoaranya -=ar
  371. client_print(0, print_chat, "VA: %d", vevoujaranya)
  372. new Handle:Queryaranyelvetel = SQL_PrepareQuery(SqlConnection, "UPDATE `users` SET `arany` = '%d' WHERE `username` = '%s'", vevoujaranya, vevoname)
  373. if(!SQL_Execute(Queryaranyelvetel) )
  374. {
  375. SQL_QueryError(Queryaranyelvetel, Error, 511)
  376. set_fail_state(Error)
  377.  
  378. }
  379. /*Fegyver törlés a piactól*/
  380. new Handle:Querytorol = SQL_PrepareQuery(SqlConnection, "DELETE FROM `piac` WHERE `eladoname` = '%s' AND `itemid` = '%d'", eladoname, fid)
  381. if(!SQL_Execute(Querytorol) )
  382. {
  383. SQL_QueryError(Querytorol, Error, 511)
  384. set_fail_state(Error)
  385.  
  386. }
  387. SQL_FreeHandle(Query)
  388. SQL_FreeHandle(Queryvevo)
  389. SQL_FreeHandle(Querytorol)
  390. SQL_FreeHandle(Queryadas)
  391. SQL_FreeHandle(Queryaranyadas)
  392. SQL_FreeHandle(Queryaranyelvetel)
  393. SQL_FreeHandle(SqlConnection)
  394. }
  395. public ReloadData(id)
  396. {
  397. new ErrorCode
  398. new Error[512]
  399. new Handle:SqlConnection = SQL_Connect(g_SqlTuple, ErrorCode, Error, 511)
  400.  
  401. if(SqlConnection == Empty_Handle)
  402. {
  403. set_fail_state(Error)
  404. }
  405. new nev[32]
  406. get_user_name(id, nev, 31)
  407. new Handle:Query = SQL_PrepareQuery(SqlConnection, "SELECT * FROM users WHERE username='%s'", nev)
  408. if(!SQL_Execute(Query) )
  409. {
  410. SQL_QueryError(Query, Error, 511)
  411. set_fail_state(Error)
  412.  
  413. }
  414. new one = SQL_FieldNameToNum(Query, "arany")
  415.  
  416. arany[id] = SQL_ReadResult(Query, one)
  417. SQL_FreeHandle(Query)
  418. SQL_FreeHandle(SqlConnection)
  419.  
  420. }

 


Köszi, hogy végig olvastad a kis "mesémet" remélem sikerült érthetően leírnom az elkészítés menetét. Ha tudod, hogy hogyan oldj meg valamilyen feladatot a forráskód megírása sem fog gondot okozni. A forráskód értelmezéséhez elengedhetetlen a mysql ismerete. Ha van helyesírási hibám elnézést, de ha szerkesztem a HSZT megint mindent sma kódba kell rakjak és akkor ... lesz.

_________________
Kép

Ők köszönték meg CrB nek ezt a hozzászólást (összesen 2): Applee (2015.06.21. 10:53) • Papi (2015.06.22. 22:44)
  Népszerűség: 4.55%


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: SQL Piac
HozzászólásElküldve: 2015.06.19. 20:59 
Offline
Tiszteletbeli
Avatar

Csatlakozott: 2012.10.09. 13:48
Hozzászólások: 1439
Megköszönték neki: 174 alkalommal
Szép, csak az a helyesírás.. :P Ez szerintem mehet az AMXX részhez. :)

_________________
Minden jót! :)


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: SQL Piac
HozzászólásElküldve: 2015.06.20. 10:58 
Offline
Őskövület
Avatar

Csatlakozott: 2012.02.27. 09:42
Hozzászólások: 2588
Megköszönt másnak: 25 alkalommal
Megköszönték neki: 418 alkalommal
Köszi áthelyeztem. A helyesírásról annyit, hogy örülök h le tudtam írni 2 törött kézzel XD konkrétan csak az ujjaimat tudom mozgatni és olyan 20 perc után elkezd fájni. Újraolvastam én is valahol betűk maradtak le valahol magam sem értem mit akartam leírni szóval bocsi érte :D Ha lesz egy fél órám amikor tudok írni kijavítom őket :D

_________________
Kép


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: SQL Piac
HozzászólásElküldve: 2015.06.22. 12:43 
Offline
Tag

Csatlakozott: 2015.05.12. 19:40
Hozzászólások: 59
Megköszönt másnak: 8 alkalommal
Megköszönték neki: 5 alkalommal
Kár hogy nem a teljes verzió,pedig a fegyverek hozzá írása érdekelt volna:D


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: SQL Piac
HozzászólásElküldve: 2015.06.22. 13:28 
Offline
Őskövület
Avatar

Csatlakozott: 2012.02.27. 09:42
Hozzászólások: 2588
Megköszönt másnak: 25 alkalommal
Megköszönték neki: 418 alkalommal
Az se nagy cucc..

Csinálsz 1 entity-t amit random helyre rak le a szerver X időközönként (karácsonyi dobozok plugin) utána regisztrálod a felvétel eventet ahol a tömbből kiválasztasz 1 random értéket és azt a fegyvert hozzáadod a fegyverek táblához (client_putinserver be benne van h h kell hozzáadni a táblához) ha kell 1 fegyver listázó menü azt is oda tudom adni :D

_________________
Kép


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: SQL Piac
HozzászólásElküldve: 2015.06.22. 13:36 
Offline
Tag

Csatlakozott: 2015.05.12. 19:40
Hozzászólások: 59
Megköszönt másnak: 8 alkalommal
Megköszönték neki: 5 alkalommal
" a karácsonyi doboz plugin-t" már átalakítottam,viszont a fegyver listázó menü érdekelne + ha valamiből 0 darab van azt hogyan jelenítsem meg az eladásnál?:D


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: SQL Piac
HozzászólásElküldve: 2015.06.22. 15:03 
Offline
Őskövület
Avatar

Csatlakozott: 2012.02.27. 09:42
Hozzászólások: 2588
Megköszönt másnak: 25 alkalommal
Megköszönték neki: 418 alkalommal
Ha valamiből 0 db van az nyilván nem eladható ezért nem is jelenítettem meg. Nem nehéz az se viszont picit át kell alakítani a dolgot.

_________________
Kép


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: SQL Piac
HozzászólásElküldve: 2015.06.22. 22:43 
Offline
Félisten
Avatar

Csatlakozott: 2013.03.12. 10:03
Hozzászólások: 859
Megköszönt másnak: 37 alkalommal
Megköszönték neki: 44 alkalommal
Széjp. :) ment a pacsi brate :D

_________________
Kép


Hozzászólás jelentése
Vissza a tetejére
   
Hozzászólások megjelenítése:  Rendezés  
Új téma nyitása  Hozzászólás a témához  [ 8 hozzászólás ] 


Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 0 vendég


Nyithatsz új témákat ebben a fórumban.
Válaszolhatsz egy témára ebben a fórumban.
Nem szerkesztheted a hozzászólásaidat ebben a fórumban.
Nem törölheted a hozzászólásaidat ebben a fórumban.
Nem küldhetsz csatolmányokat ebben a fórumban.

Keresés:
Ugrás:  
Powered by phpBB® Forum Software © phpBB Limited
Magyar fordítás © Magyar phpBB Közösség
Portal: Kiss Portal Extension © Michael O'Toole