Offline |
|
|
Csatlakozott:2012.02.27. 09:42 Hozzászólások:2588 Megköszönt másnak: 26 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 #include <amxmodx> #include <amxmisc> #include <sqlx> #define PLUGIN "New Plug-In" #define VERSION "1.0" #define AUTHOR "author" new eladoname[64], arany[32], valasztottfegyverid new Handle:g_SqlTuple new Host[] = "localhost" new User[] = "user" new Pass[] = "pass" 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 #define MAXFEGYO 51 new const FEGYVERNEV[MAXFEGYO+1][] = { "Alap fegyverek", "Fegyver 2", "Fegyver 3", "Fegyver 4", "Fegyver 5", "Fegyver 6", "Fegyver 7", "Fegyver 8", "Fegyver 9", "Fegyver 10", "Fegyver 11", "Fegyver 12", "Fegyver 13", "Fegyver 14", "Fegyver 15", "Fegyver 16", "Fegyver 17", "Fegyver 18", "Fegyver 19", "Fegyver 20", "Fegyver 21", "Fegyver 22", "Fegyver 23", "Fegyver 24", "Fegyver 25", "Fegyver 26", "Fegyver 27", "Fegyver 28", "Fegyver 29", "Fegyver 30", "Fegyver 31", "Fegyver 32", "Fegyver 33", "Fegyver 34", "Fegyver 35", "Fegyver 36", "Fegyver 37", "Fegyver 38", "Fegyver 39", "Fegyver 40", "Fegyver 41", "Fegyver 42", "Fegyver 43", "Fegyver 44", "Fegyver 45", "Fegyver 46", "Fegyver 47", "Fegyver 48", "Fegyver 49", "Fegyver 50", "Fegyver 51", "Fegyver 52" }
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. public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_clcmd("say /piacv", "piacvasarlas") register_clcmd("say /piaca", "piaceladas") register_clcmd("AR", "cmdar") register_clcmd("say /add", "aranya") makeTuple() createTable() }
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. public makeTuple() { g_SqlTuple = SQL_MakeDbTuple(Host,User,Pass,Db) } public createTable() { SQL_ThreadQuery(g_SqlTuple,"createTableThread", "CREATE TABLE IF NOT EXISTS users (username varchar(32), arany INT(11))"); SQL_ThreadQuery(g_SqlTuple,"createTableThread", "CREATE TABLE IF NOT EXISTS fegyverek (username varchar(32), itemid INT(11) )") SQL_ThreadQuery(g_SqlTuple,"createTableThread", "CREATE TABLE IF NOT EXISTS piac (eladoname varchar(32), itemid INT(11), ar INT(11) )") } public createTableThread(FailState,Handle:Query,Error[],Errcode,Data[],DataSize) { if(FailState == TQUERY_CONNECT_FAILED) return set_fail_state("Nem tudtam csatlakozni az adatbazishoz.") else if(FailState == TQUERY_QUERY_FAILED) return set_fail_state("Elbasztal valamit.") if(Errcode) return log_amx("Hibat dobtam: %s",Error) return PLUGIN_CONTINUE }
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. public client_putinserver(id) { new ErrorCode new Error[512] new Handle:SqlConnection = SQL_Connect(g_SqlTuple, ErrorCode, Error, 511) if(SqlConnection == Empty_Handle) { set_fail_state(Error) } new nev[32] get_user_name(id, nev, 31) new Handle:Check = SQL_PrepareQuery(SqlConnection, "SELECT * FROM users WHERE username = '%s'", nev) if(!SQL_Execute(Check)) { SQL_QueryError(Check, Error, 511) set_fail_state(Error) } if(SQL_NumRows(Check) > 0) { new a = SQL_FieldNameToNum(Check, "arany") arany[id] = SQL_ReadResult(Check, a) } else { new Handle:Query = SQL_PrepareQuery(SqlConnection, "INSERT INTO users (username, arany) VALUES ('%s', '100')", nev) new Handle:Query2 = SQL_PrepareQuery(SqlConnection, "INSERT INTO fegyverek (username, itemid) VALUES ('%s', '12')", nev) if(!SQL_Execute(Query) || !SQL_Execute(Query2)) { SQL_QueryError(Query, Error, 511) SQL_QueryError(Query2, Error, 511) set_fail_state(Error) } SQL_FreeHandle(Query) } SQL_FreeHandle(Check) SQL_FreeHandle(SqlConnection) }
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ő. public piaceladas(id) { new szTemp[512] formatex(szTemp, charsmax(szTemp), "\yPiac \w[ELADĂS] %d arany ^n\rVálaszd ki a fegyvert!", arany[id]) new menu = menu_create(szTemp, "piaceladasmenuhandler"); new szTempid[10],tempid new ErrorCode new Error[512] new Handle:SqlConnection = SQL_Connect(g_SqlTuple, ErrorCode, Error, 511) if(SqlConnection == Empty_Handle) { set_fail_state(Error) } new nev[32] get_user_name(id, nev, 31) new Handle:Kveri = SQL_PrepareQuery(SqlConnection, "SELECT * FROM fegyverek WHERE username='%s'", nev) if(!SQL_Execute(Kveri) ) { SQL_QueryError(Kveri, Error, 511) set_fail_state(Error) } for(new x=1; x<=SQL_NumRows(Kveri); x++) { tempid = SQL_ReadResult(Kveri, SQL_FieldNameToNum(Kveri, "itemid")) SQL_NextRow(Kveri) num_to_str(tempid, szTempid, charsmax(szTempid)); if(tempid != 0) menu_additem(menu, FEGYVERNEV[tempid], szTempid, 0); } SQL_FreeHandle(Kveri) SQL_FreeHandle(SqlConnection) menu_display(id, menu, 0) } public piaceladasmenuhandler(id, menu, item) { if(item == MENU_EXIT) { menu_destroy(menu); return PLUGIN_HANDLED; } new data[6], szName[64] new access, callback; menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback); valasztottfegyverid = str_to_num(data); client_cmd(id, "messagemode AR") menu_destroy(menu); return PLUGIN_HANDLED; }
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. public cmdar(id) { new ertek[121] read_args(ertek, charsmax(ertek)) remove_quotes(ertek) str_to_num(ertek) new ErrorCode new Error[512] new Handle:SqlConnection = SQL_Connect(g_SqlTuple, ErrorCode, Error, 511) if(SqlConnection == Empty_Handle) { set_fail_state(Error) } new nev[32] get_user_name(id, nev, 31) new Handle:Qvery = SQL_PrepareQuery(SqlConnection, "INSERT INTO piac VALUES('%s', '%d', '%s')",nev,valasztottfegyverid,ertek ) new Handle:Qverydelete = SQL_PrepareQuery(SqlConnection, "DELETE FROM `fegyverek` WHERE `username` = '%s' AND `itemid` = '%d'",nev,valasztottfegyverid) if(!SQL_Execute(Qvery) ) { SQL_QueryError(Qvery, Error, 511) set_fail_state(Error) } else if(!SQL_Execute(Qverydelete) ) { SQL_QueryError(Qverydelete, Error, 511) set_fail_state(Error) } SQL_FreeHandle(Qvery) SQL_FreeHandle(Qverydelete) SQL_FreeHandle(SqlConnection) }
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. public piacvasarlas(id) { new szTemp[512],temptwo[512] formatex(szTemp, charsmax(szTemp), "\yPiac \w[VĂSĂRLĂS] %d arany^n\rVálaszd ki a fegyvert!",arany[id]) new menu = menu_create(szTemp, "piacvasarlasmenuhandler"); new szTempid[10] new ErrorCode new Error[512] new Handle:SqlConnection = SQL_Connect(g_SqlTuple, ErrorCode, Error, 511) if(SqlConnection == Empty_Handle) { set_fail_state(Error) } new Handle:Kveri = SQL_PrepareQuery(SqlConnection, "SELECT * FROM `piac`") if(!SQL_Execute(Kveri) ) { SQL_QueryError(Kveri, Error, 511) set_fail_state(Error) } for(new x=1; x<=SQL_NumRows(Kveri); x++) { new elado = SQL_FieldNameToNum(Kveri, "eladoname") new tempid = SQL_ReadResult(Kveri, SQL_FieldNameToNum(Kveri, "itemid")) new ara = SQL_ReadResult(Kveri, SQL_FieldNameToNum(Kveri, "ar")) SQL_ReadResult(Kveri, elado, eladoname, sizeof(eladoname)-1); SQL_NextRow(Kveri) num_to_str(tempid, szTempid, charsmax(szTempid)); formatex(temptwo, charsmax(temptwo), "\rEladĂł: \w %s | \y%s | \rĂra: \y %d",eladoname, FEGYVERNEV[tempid],ara) menu_additem(menu, temptwo, szTempid, 0); } SQL_FreeHandle(Kveri) SQL_FreeHandle(SqlConnection) menu_display(id, menu, 0) } public piacvasarlasmenuhandler(id,menu,item) { if(item == MENU_EXIT) { menu_destroy(menu); return PLUGIN_HANDLED; } new data[6], szName[64] new access, callback; menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback); valasztottfegyverid = str_to_num(data); new ErrorCode new Error[512] new Handle:SqlConnection = SQL_Connect(g_SqlTuple, ErrorCode, Error, 511) if(SqlConnection == Empty_Handle) { set_fail_state(Error) } new Handle:Kveri = SQL_PrepareQuery(SqlConnection, "SELECT * FROM `piac` WHERE itemid = '%d' AND eladoname = '%s'",valasztottfegyverid, eladoname ) if(!SQL_Execute(Kveri) ) { SQL_QueryError(Kveri, Error, 511) set_fail_state(Error) } new eladasiar = SQL_ReadResult(Kveri, SQL_FieldNameToNum(Kveri, "ar")) SQL_FreeHandle(Kveri) SQL_FreeHandle(SqlConnection) new nev[32] get_user_name(id, nev, 31) if(arany[id] >= eladasiar) { aranypiac(eladoname, nev ,valasztottfegyverid, eladasiar) } ReloadData(id) menu_destroy(menu); return PLUGIN_HANDLED; }
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. stock aranypiac(const eladoname[],const vevoname[], const fid, const ar) { new ErrorCode new Error[512] new Handle:SqlConnection = SQL_Connect(g_SqlTuple, ErrorCode, Error, 511) /*eladó infó*/ if(SqlConnection == Empty_Handle) { set_fail_state(Error) } new Handle:Query = SQL_PrepareQuery(SqlConnection, "SELECT * FROM users WHERE username='%s'", eladoname) if(!SQL_Execute(Query) ) { SQL_QueryError(Query, Error, 511) set_fail_state(Error) } new one = SQL_FieldNameToNum(Query, "arany") new eladoaranya = SQL_ReadResult(Query, one) /*vevő infó*/ new Handle:Queryvevo = SQL_PrepareQuery(SqlConnection, "SELECT * FROM users WHERE username='%s'", vevoname) if(!SQL_Execute(Queryvevo) ) { SQL_QueryError(Queryvevo, Error, 511) set_fail_state(Error) } new two = SQL_FieldNameToNum(Queryvevo, "arany") new vevoaranya = SQL_ReadResult(Queryvevo, two) /*Fegyver adása a vevőnek*/ new Handle:Queryadas = SQL_PrepareQuery(SqlConnection, "INSERT INTO `fegyverek`(`username`, `itemid`) VALUES ('%s','%d')", vevoname, fid) if(!SQL_Execute(Queryadas) ) { SQL_QueryError(Queryadas, Error, 511) set_fail_state(Error) } /*Arany odaadása az eladónak*/ new eladoarany = eladoaranya+=ar client_print(0, print_chat, "EA: %d", eladoarany) new Handle:Queryaranyadas = SQL_PrepareQuery(SqlConnection, "UPDATE `users` SET `arany` = '%d' WHERE `username` = '%s'",eladoarany, eladoname) if(!SQL_Execute(Queryaranyadas) ) { SQL_QueryError(Queryaranyadas, Error, 511) set_fail_state(Error) } /*Arany elvétele a vevőtől*/ new vevoujaranya = vevoaranya -=ar client_print(0, print_chat, "VA: %d", vevoujaranya) new Handle:Queryaranyelvetel = SQL_PrepareQuery(SqlConnection, "UPDATE `users` SET `arany` = '%d' WHERE `username` = '%s'", vevoujaranya, vevoname) if(!SQL_Execute(Queryaranyelvetel) ) { SQL_QueryError(Queryaranyelvetel, Error, 511) set_fail_state(Error) } /*Fegyver törlés a piactól*/ new Handle:Querytorol = SQL_PrepareQuery(SqlConnection, "DELETE FROM `piac` WHERE `eladoname` = '%s' AND `itemid` = '%d'", eladoname, fid) if(!SQL_Execute(Querytorol) ) { SQL_QueryError(Querytorol, Error, 511) set_fail_state(Error) } SQL_FreeHandle(Query) SQL_FreeHandle(Queryvevo) SQL_FreeHandle(Querytorol) SQL_FreeHandle(Queryadas) SQL_FreeHandle(Queryaranyadas) SQL_FreeHandle(Queryaranyelvetel) SQL_FreeHandle(SqlConnection) }
10. Végeztünk mindennel már csak egy dolog van hátra az adatok újra betöltése public ReloadData(id) { new ErrorCode new Error[512] new Handle:SqlConnection = SQL_Connect(g_SqlTuple, ErrorCode, Error, 511) if(SqlConnection == Empty_Handle) { set_fail_state(Error) } new nev[32] get_user_name(id, nev, 31) new Handle:Query = SQL_PrepareQuery(SqlConnection, "SELECT * FROM users WHERE username='%s'", nev) if(!SQL_Execute(Query) ) { SQL_QueryError(Query, Error, 511) set_fail_state(Error) } new one = SQL_FieldNameToNum(Query, "arany") arany[id] = SQL_ReadResult(Query, one) SQL_FreeHandle(Query) SQL_FreeHandle(SqlConnection) }
Teljes forráskód: /* Plugin generated by AMXX-Studio */ #include <amxmodx> #include <amxmisc> #include <sqlx> #define PLUGIN "New Plug-In" #define VERSION "1.0" #define AUTHOR "author" new eladoname[64], arany[32], valasztottfegyverid new Handle:g_SqlTuple new Host[] = "localhost" new User[] = "user" new Pass[] = "pass" new Db[] = "dbname" #define MAXFEGYO 51 new const FEGYVERNEV[MAXFEGYO+1][] = { "Alap fegyverek", "Fegyver 2", "Fegyver 3", "Fegyver 4", "Fegyver 5", "Fegyver 6", "Fegyver 7", "Fegyver 8", "Fegyver 9", "Fegyver 10", "Fegyver 11", "Fegyver 12", "Fegyver 13", "Fegyver 14", "Fegyver 15", "Fegyver 16", "Fegyver 17", "Fegyver 18", "Fegyver 19", "Fegyver 20", "Fegyver 21", "Fegyver 22", "Fegyver 23", "Fegyver 24", "Fegyver 25", "Fegyver 26", "Fegyver 27", "Fegyver 28", "Fegyver 29", "Fegyver 30", "Fegyver 31", "Fegyver 32", "Fegyver 33", "Fegyver 34", "Fegyver 35", "Fegyver 36", "Fegyver 37", "Fegyver 38", "Fegyver 39", "Fegyver 40", "Fegyver 41", "Fegyver 42", "Fegyver 43", "Fegyver 44", "Fegyver 45", "Fegyver 46", "Fegyver 47", "Fegyver 48", "Fegyver 49", "Fegyver 50", "Fegyver 51", "Fegyver 52" } public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_clcmd("say /piacv", "piacvasarlas") register_clcmd("say /piaca", "piaceladas") register_clcmd("AR", "cmdar") register_clcmd("say /add", "aranya") makeTuple() createTable() } public aranya(id) arany[id] += 100000 public client_putinserver(id) { new ErrorCode new Error[512] new Handle:SqlConnection = SQL_Connect(g_SqlTuple, ErrorCode, Error, 511) if(SqlConnection == Empty_Handle) { set_fail_state(Error) } new nev[32] get_user_name(id, nev, 31) new Handle:Check = SQL_PrepareQuery(SqlConnection, "SELECT * FROM users WHERE username = '%s'", nev) if(!SQL_Execute(Check)) { SQL_QueryError(Check, Error, 511) set_fail_state(Error) } if(SQL_NumRows(Check) > 0) { new a = SQL_FieldNameToNum(Check, "arany") arany[id] = SQL_ReadResult(Check, a) } else { new Handle:Query = SQL_PrepareQuery(SqlConnection, "INSERT INTO users (username, arany) VALUES ('%s', '100')", nev) new Handle:Query2 = SQL_PrepareQuery(SqlConnection, "INSERT INTO fegyverek (username, itemid) VALUES ('%s', '12')", nev) if(!SQL_Execute(Query) || !SQL_Execute(Query2)) { SQL_QueryError(Query, Error, 511) SQL_QueryError(Query2, Error, 511) set_fail_state(Error) } SQL_FreeHandle(Query) } SQL_FreeHandle(Check) SQL_FreeHandle(SqlConnection) } public makeTuple() { g_SqlTuple = SQL_MakeDbTuple(Host,User,Pass,Db) } public createTable() { SQL_ThreadQuery(g_SqlTuple,"createTableThread", "CREATE TABLE IF NOT EXISTS users (username varchar(32), arany INT(11))"); SQL_ThreadQuery(g_SqlTuple,"createTableThread", "CREATE TABLE IF NOT EXISTS fegyverek (username varchar(32), itemid INT(11) )") SQL_ThreadQuery(g_SqlTuple,"createTableThread", "CREATE TABLE IF NOT EXISTS piac (eladoname varchar(32), itemid INT(11), ar INT(11) )") } public createTableThread(FailState,Handle:Query,Error[],Errcode,Data[],DataSize) { if(FailState == TQUERY_CONNECT_FAILED) return set_fail_state("Nem tudtam csatlakozni az adatbazishoz.") else if(FailState == TQUERY_QUERY_FAILED) return set_fail_state("Elbasztal valamit.") if(Errcode) return log_amx("Hibat dobtam: %s",Error) return PLUGIN_CONTINUE } public piaceladas(id) { new szTemp[512] formatex(szTemp, charsmax(szTemp), "\yPiac \w[ELADĂS] %d arany ^n\rVálaszd ki a fegyvert!", arany[id]) new menu = menu_create(szTemp, "piaceladasmenuhandler"); new szTempid[10],tempid new ErrorCode new Error[512] new Handle:SqlConnection = SQL_Connect(g_SqlTuple, ErrorCode, Error, 511) if(SqlConnection == Empty_Handle) { set_fail_state(Error) } new nev[32] get_user_name(id, nev, 31) new Handle:Kveri = SQL_PrepareQuery(SqlConnection, "SELECT * FROM fegyverek WHERE username='%s'", nev) if(!SQL_Execute(Kveri) ) { SQL_QueryError(Kveri, Error, 511) set_fail_state(Error) } for(new x=1; x<=SQL_NumRows(Kveri); x++) { tempid = SQL_ReadResult(Kveri, SQL_FieldNameToNum(Kveri, "itemid")) SQL_NextRow(Kveri) num_to_str(tempid, szTempid, charsmax(szTempid)); if(tempid != 0) menu_additem(menu, FEGYVERNEV[tempid], szTempid, 0); } SQL_FreeHandle(Kveri) SQL_FreeHandle(SqlConnection) menu_display(id, menu, 0) } public piaceladasmenuhandler(id, menu, item) { if(item == MENU_EXIT) { menu_destroy(menu); return PLUGIN_HANDLED; } new data[6], szName[64] new access, callback; menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback); valasztottfegyverid = str_to_num(data); client_cmd(id, "messagemode AR") menu_destroy(menu); return PLUGIN_HANDLED; } public cmdar(id) { new ertek[121] read_args(ertek, charsmax(ertek)) remove_quotes(ertek) str_to_num(ertek) new ErrorCode new Error[512] new Handle:SqlConnection = SQL_Connect(g_SqlTuple, ErrorCode, Error, 511) if(SqlConnection == Empty_Handle) { set_fail_state(Error) } new nev[32] get_user_name(id, nev, 31) new Handle:Qvery = SQL_PrepareQuery(SqlConnection, "INSERT INTO piac VALUES('%s', '%d', '%s')",nev,valasztottfegyverid,ertek ) new Handle:Qverydelete = SQL_PrepareQuery(SqlConnection, "DELETE FROM `fegyverek` WHERE `username` = '%s' AND `itemid` = '%d'",nev,valasztottfegyverid) if(!SQL_Execute(Qvery) ) { SQL_QueryError(Qvery, Error, 511) set_fail_state(Error) } else if(!SQL_Execute(Qverydelete) ) { SQL_QueryError(Qverydelete, Error, 511) set_fail_state(Error) } SQL_FreeHandle(Qvery) SQL_FreeHandle(Qverydelete) SQL_FreeHandle(SqlConnection) } public piacvasarlas(id) { new szTemp[512],temptwo[512] formatex(szTemp, charsmax(szTemp), "\yPiac \w[VĂSĂRLĂS] %d arany^n\rVálaszd ki a fegyvert!",arany[id]) new menu = menu_create(szTemp, "piacvasarlasmenuhandler"); new szTempid[10] new ErrorCode new Error[512] new Handle:SqlConnection = SQL_Connect(g_SqlTuple, ErrorCode, Error, 511) if(SqlConnection == Empty_Handle) { set_fail_state(Error) } new Handle:Kveri = SQL_PrepareQuery(SqlConnection, "SELECT * FROM `piac`") if(!SQL_Execute(Kveri) ) { SQL_QueryError(Kveri, Error, 511) set_fail_state(Error) } for(new x=1; x<=SQL_NumRows(Kveri); x++) { new elado = SQL_FieldNameToNum(Kveri, "eladoname") new tempid = SQL_ReadResult(Kveri, SQL_FieldNameToNum(Kveri, "itemid")) new ara = SQL_ReadResult(Kveri, SQL_FieldNameToNum(Kveri, "ar")) SQL_ReadResult(Kveri, elado, eladoname, sizeof(eladoname)-1); SQL_NextRow(Kveri) num_to_str(tempid, szTempid, charsmax(szTempid)); formatex(temptwo, charsmax(temptwo), "\rEladĂł: \w %s | \y%s | \rĂra: \y %d",eladoname, FEGYVERNEV[tempid],ara) menu_additem(menu, temptwo, szTempid, 0); } SQL_FreeHandle(Kveri) SQL_FreeHandle(SqlConnection) menu_display(id, menu, 0) } public piacvasarlasmenuhandler(id,menu,item) { if(item == MENU_EXIT) { menu_destroy(menu); return PLUGIN_HANDLED; } new data[6], szName[64] new access, callback; menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback); valasztottfegyverid = str_to_num(data); new ErrorCode new Error[512] new Handle:SqlConnection = SQL_Connect(g_SqlTuple, ErrorCode, Error, 511) if(SqlConnection == Empty_Handle) { set_fail_state(Error) } new Handle:Kveri = SQL_PrepareQuery(SqlConnection, "SELECT * FROM `piac` WHERE itemid = '%d' AND eladoname = '%s'",valasztottfegyverid, eladoname ) if(!SQL_Execute(Kveri) ) { SQL_QueryError(Kveri, Error, 511) set_fail_state(Error) } new eladasiar = SQL_ReadResult(Kveri, SQL_FieldNameToNum(Kveri, "ar")) SQL_FreeHandle(Kveri) SQL_FreeHandle(SqlConnection) new nev[32] get_user_name(id, nev, 31) if(arany[id] >= eladasiar) { aranypiac(eladoname, nev ,valasztottfegyverid, eladasiar) } ReloadData(id) menu_destroy(menu); return PLUGIN_HANDLED; } stock aranypiac(const eladoname[],const vevoname[], const fid, const ar) { new ErrorCode new Error[512] new Handle:SqlConnection = SQL_Connect(g_SqlTuple, ErrorCode, Error, 511) /*eladó infó*/ if(SqlConnection == Empty_Handle) { set_fail_state(Error) } new Handle:Query = SQL_PrepareQuery(SqlConnection, "SELECT * FROM users WHERE username='%s'", eladoname) if(!SQL_Execute(Query) ) { SQL_QueryError(Query, Error, 511) set_fail_state(Error) } new one = SQL_FieldNameToNum(Query, "arany") new eladoaranya = SQL_ReadResult(Query, one) /*vevő infó*/ new Handle:Queryvevo = SQL_PrepareQuery(SqlConnection, "SELECT * FROM users WHERE username='%s'", vevoname) if(!SQL_Execute(Queryvevo) ) { SQL_QueryError(Queryvevo, Error, 511) set_fail_state(Error) } new two = SQL_FieldNameToNum(Queryvevo, "arany") new vevoaranya = SQL_ReadResult(Queryvevo, two) /*Fegyver adása a vevőnek*/ new Handle:Queryadas = SQL_PrepareQuery(SqlConnection, "INSERT INTO `fegyverek`(`username`, `itemid`) VALUES ('%s','%d')", vevoname, fid) if(!SQL_Execute(Queryadas) ) { SQL_QueryError(Queryadas, Error, 511) set_fail_state(Error) } /*Arany odaadása az eladónak*/ new eladoarany = eladoaranya+=ar client_print(0, print_chat, "EA: %d", eladoarany) new Handle:Queryaranyadas = SQL_PrepareQuery(SqlConnection, "UPDATE `users` SET `arany` = '%d' WHERE `username` = '%s'",eladoarany, eladoname) if(!SQL_Execute(Queryaranyadas) ) { SQL_QueryError(Queryaranyadas, Error, 511) set_fail_state(Error) } /*Arany elvétele a vevőtől*/ new vevoujaranya = vevoaranya -=ar client_print(0, print_chat, "VA: %d", vevoujaranya) new Handle:Queryaranyelvetel = SQL_PrepareQuery(SqlConnection, "UPDATE `users` SET `arany` = '%d' WHERE `username` = '%s'", vevoujaranya, vevoname) if(!SQL_Execute(Queryaranyelvetel) ) { SQL_QueryError(Queryaranyelvetel, Error, 511) set_fail_state(Error) } /*Fegyver törlés a piactól*/ new Handle:Querytorol = SQL_PrepareQuery(SqlConnection, "DELETE FROM `piac` WHERE `eladoname` = '%s' AND `itemid` = '%d'", eladoname, fid) if(!SQL_Execute(Querytorol) ) { SQL_QueryError(Querytorol, Error, 511) set_fail_state(Error) } SQL_FreeHandle(Query) SQL_FreeHandle(Queryvevo) SQL_FreeHandle(Querytorol) SQL_FreeHandle(Queryadas) SQL_FreeHandle(Queryaranyadas) SQL_FreeHandle(Queryaranyelvetel) SQL_FreeHandle(SqlConnection) } public ReloadData(id) { new ErrorCode new Error[512] new Handle:SqlConnection = SQL_Connect(g_SqlTuple, ErrorCode, Error, 511) if(SqlConnection == Empty_Handle) { set_fail_state(Error) } new nev[32] get_user_name(id, nev, 31) new Handle:Query = SQL_PrepareQuery(SqlConnection, "SELECT * FROM users WHERE username='%s'", nev) if(!SQL_Execute(Query) ) { SQL_QueryError(Query, Error, 511) set_fail_state(Error) } new one = SQL_FieldNameToNum(Query, "arany") arany[id] = SQL_ReadResult(Query, one) SQL_FreeHandle(Query) SQL_FreeHandle(SqlConnection) }
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 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) |
|
|