Pán Podnikateľ 52 Odesláno: 15. Srpen, 2016 Share Odesláno: 15. Srpen, 2016 OBSAH Obtiažnosť Predslov Úvod Obsah Záver Funkční pouze do verze 39 Tento návod je aktuální pouze do verze 39. Na aktualizaci návodu se pracuje. ObtiažnosťPredslov Vážení čitatelia. Už dlhšie som si všímam, ako sa všetci neustále delíte, na viac táborov, a pritom, máte celý čas, ten vysnení, ukladací systém, podnosom. V konečnom dôsledku, aj chápem, prečo málo kto skočí, po MySQL databáze. Jednak, sa musíte učiť nový jazyk, SQL, a na stránke druhej, nikto nenapísal, žiadny komplexný návod. Samozrejme, že niekto môže podotknúť „Ale v roku 2011 napísal jeden mladí junák ...“ áno, máte pravdu, niečo podobné návodu, na MySQL ukladací systém, som tu videl, ale za ten čas, sa toho veľa zmenilo. Neskôr to zistí, aj náš miestni spochybňovač.Úvod Tak, ak si prežil môj predslov, môžeme pokračovať ďalej, v návode. Ako prvé, budete potrebovať prístup, k vašej databáze. Ja osobne, používam na tvorbu tabuliek, phpMyAdmin. Ak ste skúsenejší, môžete to robiť aj manuálne, cez konzolu. Ďalej budete potrebovať MySQL plugin, a includ. Všetko potrebné, samozrejme prikladám, na konci tohto návodu, spolu, s návodom, na jazyk SQL. Jazyk SQL, budete potrebovať, pri rozsiahlom využití, pluginu. Tiež chcem podotknúť, že tento návod, počíta že ovládate jednotlivé datatypy, a samotný jazyk SQL. Príprava Ak ovládate phpMyAdmin prosím prejdite na ďalší bod. V príprave, vás naučím, ako vytvoriť databázu, a samotnú tabuľku, ktorá bude slúžiť, na ukladanie, a čítanie vašich dát. Samotní systém, sa bude skladať z atribútov, ktoré, budú mať v sebe isté informácie. Ako napríklad Meno hráča. Tak tiež, jeden z atribútov, musí byť kľúč, teda atribút, ktorý, je nemenný. V tomto návode, to bude, naša vytvorená, premenná “ID“. Po prihlásení do systému môžte vidieť následovné menu. Kde kliknete v hornej lište na ikonku databázy. Po kliknutí, sa nám zobrazí žiadosť, na vytvorenie databázy. Do prázdnej kolonky, napíšeme “Database“. Tím pádom, sa bude naša databáza, volať Database. Potom, kliknite na “vytvoriť“. Teraz, sa nám vytvorila naša databáza. Ďalší krok, bude vytvoriť tabuľku, a následne do nej vložiť naše atribúty. Pre editáciu databázy, musíte kliknúť na ikonku, v ľavej lište, s názvom našej databázy, ktorú sme vytvorili “Database“. Následne, sa nám zobrazí menu, na vytvorenie spomínanej tabuľky. Do prázdnej kolonky, napíšeme názov našej tabuľky, s ktorou budeme neskôr pracovať. My si tam napíšeme “account“. Vedľa našej “account“ kolonky, máme ešte tzv. “počet polí“. Počet polí, značí, že koľko atribútov, budeme používať. My osobne, budeme ukladať, 12 atribútov. Tím pádom, si zmeňte default 4, na 12. Následne, kliknite na “vykonaj“. Naša tabuľka, je teraz vytvorená. Teraz stačí, do nej vložiť, naše atribúty. V tomto kroku, nesmieme zabudnúť, na funkciu A_I. Vďaka tejto funkcií sa za každým novým záznamom pripočíta hodnota od poslednej hodnoty. Gratulujem. Vaša databáza s tabuľkami, je vytvorená. Sami musíte uznať, že to nebolo nič ťažké. Dúfam, že sa rovnako tešíte aj na ďalší krok. Obsah Vítam vás, v ďalšom bode, kde vás naučím, ako vytvoriť jednoduchú registráciu, pomocou MySQL pluginu. Opäť, vás chcem informovať, že bude potrebné, vedieť aspoň základy jazyka SQL! Ak, tieto znalosti nemáte, prosím prejdite, na bod, Záver. Špecifikácia Ako aj iné pluginy, ako SSCANF 2, používa aj MySQL plugin, isté špecifikácie na používanie. Špecifikátor Meno e dostanete reťazec naraz. Nemusíte používať, mysql_real_escape_string(). s String q Rovnaké ako %s. Pridané v SA:MP 0.3.7 R2 d | i Integer f Float x Hex b Binar Ako prvé, je potrebné, si stiahnuť plugin, aj s includom. Ten môžte stiahnuť, rolovaním stránky, na bod záver, kde sú jednotlivé linky na download, alebo učebný materiál SQL. Po pridaní includu, si otvoríme editor, do ktorého si napíšeme, následovné kód. #include <a_samp> #include <a_mysql> #define MYSQL_DB "Your_Database" #define MYSQL_USER "Name" #define MYSQL_PASS "Pass" #define MYSQL_HOST "IP" #define D_REG 0 #define D_LOG 1 native WP_Hash(buffer[], len, const str[]); Definície Najprv sme si zapísali použité include s ktorými budeme pracovať a to “<a_samp>“ a “<a_mysql>“. Potom sme vytvorili definície ktoré nám poslúžia ako skratka. #define MYSQL_DB - Meno databázy. #define MYSQL_USER - Meno užívateľa phpMyAdmin. #define MYSQL_PASS - Heslo užívateľa do phpMyAdmin. #define MYSQL_HOST - IP Serveru. Ak máte MySQL databázu, u seba na VPS, na ktorom vám beží aj server, použite local host ip “[/size]127.0.0.1“.[/size] #define D_REG - Dialog ID Registrácie #define D_LOG - Dialog ID Prihlásenia O hash hesla sa bude starať ďalší plugin ktorý by mal byť najbezpečnejší a to Whirlpool. native WP_Hash(buffer[], len, const str[]); // MySQL new MySQL; // REGISTER VARIABLE new ID [MAX_PLAYERS], Skin [MAX_PLAYERS], Kill [MAX_PLAYERS], Death [MAX_PLAYERS], Admin [MAX_PLAYERS], Wanted [MAX_PLAYERS], Password [MAX_PLAYERS], Float: PosX [MAX_PLAYERS], Float: PosY [MAX_PLAYERS], Float: PosZ [MAX_PLAYERS], Float: PosR [MAX_PLAYERS]; // CONTROL VARIABLE new C_Login [MAX_PLAYERS]; Premenné Teraz sme si vytvorili premenné. s ktorými budeme ďalej pracovať. MySQL - slúži na rozpoznávanie databáze, a celkovo nám bude udržiavať, dátové pripojenie. C_Login - Táto premenná, slúži na kontrolu, aby nám ukladanie nerobilo problémy, v prípade prihlásenia, a rázneho odhlásenia. forward OnAccountLoad(playerid); forward OnAccountCheck(playerid); forward OnAccountRegister(playerid); Forward Teraz sme si vytvorili forwardy na naše public. public OnGameModeInit(){ mysql_log(LOG_ERROR); MySQL = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_DB, MYSQL_PASS); if(mysql_errno() != 0) printf("[MySQL] Connect is not succesfull!"); else printf("[MySQL] Connect is succesfull!"); return true; } OnGameModeInit mysql_log(LOG_ERROR); - Vďaka tejto funkcií, sa nam vytvorí, v prípade nejakej chyby, MySQL log, do ktorej sa daná chyba zapíše. MySQL = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_DB, MYSQL_PASS); - tu sa jedná o samotné pripojenie na MySQL server. v prípade, ak máte iný port, na MySQL databázu ako je bežné, je potrebné za MYSQL_PASS dopísať váš port. if(mysql_errno() != 0) - slúži na informáciu o úspešnom alebo neúspešnom pripojení. public OnPlayerConnect(playerid){ C_Login [playerid] = Kill [playerid] = Death [playerid] = Admin [playerid] = Wanted [playerid] = 0; new string[128]; mysql_format(MySQL, string, sizeof(string), "SELECT `Password`, `ID` FROM `account` WHERE `UserName` = '%e' LIMIT 1", PlayerName(playerid)); mysql_tquery(MySQL, string, "OnAccountCheck", "i", playerid); return true; } OnPlayerConnect V tomto public, nulujeme naše premenné, a následne deklarujeme naše dôležitejšie premenné. Tieto premenné sa budú používať v callback “OnAccountCheck“. public OnPlayerDisconnect(playerid, reason){ if(C_Login[playerid]){ new string[255]; GetPlayerPos(playerid, PosX[playerid],PosY[playerid],PosZ[playerid]); mysql_format(MySQL, string, sizeof(string), "UPDATE `account` SET `Wanted` = %d, `Skin` = %d, `Kill` = %d,\ `Death` = %d,`Admin` = %d, `PosX` = %f, `PosY` = %f, `PosZ` = %f, `PosR` = %f WHERE `ID` = %d", Wanted[playerid],Skin[playerid],Kill[playerid],Death[playerid], Admin[playerid],PosX[playerid],PosY[playerid],PosZ[playerid],PosR[playerid],ID[playerid]); mysql_tquery(MySQL, string, "", ""); } return true; } OnPlayerDisconnect V tomto public, ukladáme, naše premenné. Najprv si deklarujeme naše premenné, a potom aktualizujeme našu databázu, s novo získanímy údajamy. V podstate to môže pripomínať ukladanie v file.inc. public OnPlayerRequestSpawn(playerid){ if(C_Login[playerid]){ SpawnPlayer (playerid); SetPlayerSkin (playerid, Skin[playerid]); SetPlayerPos (playerid, PosX[playerid],PosY[playerid],PosZ[playerid]); SetPlayerFacingAngle(playerid, PosR[playerid]); } return false; } OnPlayerRequestSpawn Tu, nám kontroluje premenná C_Login[playerid], či je true, a ak áno, spawne nás na súradnice ktoré buď máme uložené, alebo po registrácií priradené. Tak tiež, nám nahrá uložení skin. public OnPlayerDeath(playerid, killerid, reason){ if(killerid != INVALID_PLAYER_ID){ Kill [killerid]++; Death [playerid]++; Wanted[killerid]++; } return true; } OnPlayerDeath V prípade, ak bol hráč zabití, pridá mu do premennej Death + 1, a hráčovi ktorý ho zabil, Kill + 1 a Wanted + 1. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]){ switch(dialogid){ case D_REG:{ if(response){ if(strlen(inputtext) < 4) return ShowPlayerDialog(playerid, D_REG, DIALOG_STYLE_INPUT, "Registration", "Please type your password. The range of password is 4 - 19.", "confirm", "close"); new string[500]; WP_Hash(Password[playerid], 129, inputtext); mysql_format(MySQL, string, sizeof(string), "INSERT INTO `account` (`UserName`, `Password`) VALUES ('%e', '%e')", PlayerName(playerid), Password[playerid]); mysql_tquery(MySQL, string, "OnAccountRegister", "i", playerid); C_Login[playerid] = 1; } else Kick(playerid); } case D_LOG:{ if(response){ new string [225], hashpass[129]; WP_Hash(hashpass, sizeof(hashpass), inputtext); if(!strcmp(hashpass, Password[playerid])){ mysql_format(MySQL, string, sizeof(string), "SELECT * FROM `account` WHERE `UserName` = '%e' LIMIT 1", PlayerName(playerid)); mysql_tquery(MySQL, string, "OnAccountLoad", "i", playerid); C_Login[playerid] = 1; } else ShowPlayerDialog(playerid, D_LOG, DIALOG_STYLE_INPUT, "Login", "Please enter your password with which you registered on the server.", "confirm", "close"); } else Kick(playerid); } } return true; } OnDialogResponse Ako môžme vidieť máme tu dvoje dialógy ktoré sú switchované a to login a register. Register if(strlen(inputtext) < 4) - Ak je string menší ako 4, hráčovi znovu načitá dialóg. WP_Hash(Password[playerid], 129, inputtext); - Whirlpool plugin nám zahashuje heslo. Následne uložíme a voláme callback “OnAccountCheck“ Login WP_Hash(hashpass, sizeof(hashpass), inputtext); - Hashujeme inputtext. if(!strcmp(hashpass, Password[playerid])) - Porovnanie uloženého hesla a inputtextu. Na koniec voláme public z ktorého sa nám nahrajú údaje. public OnAccountCheck(playerid){ new rows, fields; cache_get_data(rows, fields, MySQL); if(rows){ cache_get_field_content(0, "Password", Password[playerid], MySQL, 129); ID[playerid] = cache_get_field_content_int(0, "ID"); ShowPlayerDialog(playerid, D_LOG, DIALOG_STYLE_INPUT, "Login", "Please enter your password with which you registered on the server.", "confirm", "close"); } else ShowPlayerDialog(playerid, D_REG, DIALOG_STYLE_INPUT, "Registration", "Please type your password. The range of password is 4 - 19.", "confirm", "close"); return true; } OnAccountCheck Vytvorili sme si dve premenné, do ktorých, sa uložia parametre, z predošlého public OnPlayerConnect(playerid). Ak premenná rows nebude nula, tak načíta hodnotu password, a priradí ju k premennej password[playerid], potom priradí aj hodnotu ID[playerid]. A podla tejto hodnoty premennej rows, sa rozhoduje ktorý dialog spustí. public OnAccountLoad(playerid){ Wanted [playerid] = cache_get_field_content_int (0, "Wanted"); Skin [playerid] = cache_get_field_content_int (0, "Skin" ); Kill [playerid] = cache_get_field_content_int (0, "Kill" ); Death [playerid] = cache_get_field_content_int (0, "Death" ); Admin [playerid] = cache_get_field_content_int (0, "Admin" ); PosX [playerid] = cache_get_field_content_float(0, "PosX" ); PosY [playerid] = cache_get_field_content_float(0, "PosY" ); PosZ [playerid] = cache_get_field_content_float(0, "PosZ" ); PosR [playerid] = cache_get_field_content_float(0, "PosR" ); return true; } OnAccountLoad - Tento public, slúži, na nahratie hráčových údajov. Dosť podobné, INI systémom. public OnAccountRegister(playerid){ ID [playerid] = cache_insert_id(); PosX [playerid] = 1682.7249; PosY [playerid] = 1451.3008; PosZ [playerid] = 10.7719; printf("[Registration] New account registered. Database ID: [%d]",ID[playerid]); return true; } OnAccountRegister Toto spätné volanie, sa vyvolá po úspešnej registrácií, kde priradí, hráčovi default premenné, plus statický ID identifikátor. stock PlayerName(playerid){ new name[MAX_PLAYER_NAME+1]; GetPlayerName(playerid, name, sizeof(name)); return name; } PlayerName Nakoniec starý známy stock. Záver Ako vidíte sami nie je to nič zložité. Jedná sa o veľmi skvelí ukladací systém ktorý vám odporúčam ako náhradu za všetky INI systémy. Celý tento návod je len zlomok toho čo daný plugin umožňuje. Dúfam, že vám môj návod pomohol. Download MySQL & Whirlpool Download Code & SQL Learn SQL Ověřený návod Tento návod prošel validací, a lze ho proto považovat za ověřený. 4 Link to comment Share on other sites More sharing options...
Globální moderátor bug 131 Odesláno: 15. Srpen, 2016 Globální moderátor Share Odesláno: 15. Srpen, 2016 Ku pawn časti sa nejdem vyjadrovať, nie z dôvodu že by nebola dobrá ale z toho dôvodu že sa pawn nevenujem tak to neviem posúdiť. Čo sa týka MySQL časti máš tam menšiu chybu Atribút, nastavíte ako kľúčový, zaškrtnutím políčka “A_I“ A_I neznamená že atribút bude kľúčový, znamená to že polu(v tomto prípade pole ID) sa každým novým záznamom pripočíta hodnota od poslednej.(Auto Increment -> preto skratka A_I) Ak teda napríklad máme tabuľku "paštéky" kde bude záznam "majka" s ID 1 a pridáme nový záznam "sandále" tak ID bude 2. Link to comment Share on other sites More sharing options...
Pán Podnikateľ 52 Odesláno: 15. Srpen, 2016 Author Share Odesláno: 15. Srpen, 2016 Ku pawn časti sa nejdem vyjadrovať, nie z dôvodu že by nebola dobrá ale z toho dôvodu že sa pawn nevenujem tak to neviem posúdiť. Čo sa týka MySQL časti máš tam menšiu chybu A_I neznamená že atribút bude kľúčový, znamená to že polu sa každým novým záznamom pripočíta hodnota od poslednej.(Auto Increment -> preto skratka A_I) Ak teda napríklad máme tabuľku "paštéky" kde bude záznam "majka" s ID 1 a pridáme nový záznam "sandále" tak ID bude 2. Ou ha zle som to potom pochopil. Hneď to opravím. Ďakujem za pomoc. 1 Link to comment Share on other sites More sharing options...
Hlavní moderátor vEnd 279 Odesláno: 17. Srpen, 2016 Hlavní moderátor Share Odesláno: 17. Srpen, 2016 Hodně užitečný návod, dobrá práce. Mám ještě dotaz: `UserName` = '%e' Proč %e a co vlastně je %e? Všiml jsem si, že jsi to použil všude, kam se měl dosadit string, je to tedy jakási náhrada za %s? Link to comment Share on other sites More sharing options...
Pán Podnikateľ 52 Odesláno: 17. Srpen, 2016 Author Share Odesláno: 17. Srpen, 2016 Hodně užitečný návod, dobrá práce. Mám ještě dotaz: Proč %e a co vlastně je %e? Všiml jsem si, že jsi to použil všude, kam se měl dosadit string, je to tedy jakási náhrada za %s? Pridané špecifikácie. 1 Link to comment Share on other sites More sharing options...
rkz 0 Odesláno: 8. Prosinec, 2017 Share Odesláno: 8. Prosinec, 2017 (upraveno) Super tutoriál ale pri phpmyadmin som mal dosť dlho problém ktorý som konečne vyriešil,a to bolo že od wanted až po posR som nemal zadané NOT NULL DEFAULT '0' v phpmyadmin.Možno to je len zlou verziou phpmyadmin alebo tak niečo ale pre tých ktorý mali tiež tento problém,spravte si v phpmyadmin novú databázu -> account s 12 riadkami a tam kliknite na SQL a vložte tam toto a určite to pôjde. CREATE TABLE `database`.`account`( `ID` INT(10) NOT NULL AUTO_INCREMENT, `UserName` CHAR(25) CHARACTER SET cp1250 COLLATE cp1250_general_ci NOT NULL, `Password` CHAR(129) CHARACTER SET cp1250 COLLATE cp1250_general_ci NOT NULL, `Wanted` INT(5) NOT NULL DEFAULT '0', `Skin` SMALLINT(3) NOT NULL DEFAULT '0', `Kill` INT(10) NOT NULL DEFAULT '0', `Death` INT(10) NOT NULL DEFAULT '0', `Admin` TINYINT(1) NOT NULL DEFAULT '0', `PosX` FLOAT NOT NULL DEFAULT '0', `PosY` FLOAT NOT NULL DEFAULT '0', `PosZ` FLOAT NOT NULL DEFAULT '0', `PosR` FLOAT NOT NULL DEFAULT '0', PRIMARY KEY(`ID`) ) ENGINE = InnoDB; Edited 8. Prosinec, 2017 by rkz Link to comment Share on other sites More sharing options...
HippeCZE 0 Odesláno: 25. Březen, 2018 Share Odesláno: 25. Březen, 2018 Ahoj, jsem z toho docela jalovej, zkusil jsem několik verzí a ani jedna ne a ne fungovat. Vůbec nevím jak nastavit server na pluginy a hlavně jaký pluginy stáhnout natož kde je stáhnout. Když dám do složky plugins soubor mysql.dll konzole vypíše že plugin: mysql failed nerozumim tomu. Dokáže mi prosím někdo poradit jak to zprovoznit od A do Z, krom vytvoření databáze. Mám linux server, ale testy dělám v localu na windows... Díky za případnou pomoc Link to comment Share on other sites More sharing options...
xhunterx 55 Odesláno: 25. Březen, 2018 Share Odesláno: 25. Březen, 2018 (upraveno) Pridaj Salt!!! Uplne najlepsie by bolo vobec nepouzivat Whirlpool plugin, ale pouzit funkciu SHA256_PassHash(), ktora je vstavana priamo v samp a bere salt ako parameter. Hash bez saltu nieje vobec bezpecny [1, 2]. Taktiez vdaka tomu nebudes musiet pouzivat dalsi plugin. Edited 25. Březen, 2018 by xhunterx 1 Link to comment Share on other sites More sharing options...
HippeCZE 0 Odesláno: 26. Březen, 2018 Share Odesláno: 26. Březen, 2018 (upraveno) Oka, pozdějš večer už sem to zprovoznil ale pouze na linuxu, ve windows se mysql plugin vubec nechytil nevim proč a celkem mi to vadí protože testovat věci tím že musí člověk nahrát soubor na linux server potom přes putty resetovat, prostě zbytečná práce, sice zabere cca minutu ale pokud to má člověk dělat byť 30x má půl hodiny v trapu xD Nehledě na to že se ten server nedá použít jako veřejnej Jinak jak píšeš, o tenhle kod mi nešlo je to na verzi 39, používám 41-2 kde sha256 zrovna přidělávám. Edited 26. Březen, 2018 by HippeCZE Link to comment Share on other sites More sharing options...
ATomas 291 Odesláno: 26. Březen, 2018 Share Odesláno: 26. Březen, 2018 Co se tyce vytvoreni databaze mysql tak preferuju mysql workbench. Je to dost user friendly, a kdyz dela clovek slozitejsi databazi, kde ma maji tabulky napr cizi klice. Tak se to v tom dobre orientuje. A hlavne ti to vygeneruje sql prikazy na vytvoreni te databaze s tabulkama a jen to v php my adminovi nahrajes. Ale nez clovek zacne s databazi, tak by jsi mel nejdrive nacist, kdy je dobre ji pouzivat atp... Databaze ma super rychle vyhledavaji a join tabulek sorteni atp.... Ale na zapis je to furt pomale. Takze pouzivat s rozumem. (Kdyz vidim ty pripady, ktery si do ty DB cpou uplne vsechno). Ono se to pouziva hodne na webech, kde te rychlost tak moc netrapi. Ale kdyz to pak pluginem pustis na sa-mp co jede na jednom vlakne Ja spis preferuju HTTP requesty a nakomunikaci s databazi, a tu databzi pustim na jinym vlakne, nebo nejlepe na jinym stroji 1 Link to comment Share on other sites More sharing options...
xhunterx 55 Odesláno: 27. Březen, 2018 Share Odesláno: 27. Březen, 2018 (upraveno) On 26. 3. 2018 at 18:14, ATomas said: Ale nez clovek zacne s databazi, tak by jsi mel nejdrive nacist, kdy je dobre ji pouzivat atp... Databaze ma super rychle vyhledavaji a join tabulek sorteni atp.... Ale na zapis je to furt pomale. Takze pouzivat s rozumem. (Kdyz vidim ty pripady, ktery si do ty DB cpou uplne vsechno). Ono se to pouziva hodne na webech, kde te rychlost tak moc netrapi. Ale kdyz to pak pluginem pustis na sa-mp co jede na jednom vlakne Ja spis preferuju HTTP requesty a nakomunikaci s databazi, a tu databzi pustim na jinym vlakne, nebo nejlepe na jinym stroji J, ono by to mozno chcelo si uvedomit, ze to 't' v tom mysql_tquery znamena threaded, nez zacnes tu svoju vecnu kritiku Tento plugin si fici na inom vlakne/vlaknach, aby presne vyriesil tieto tvoje obavy o blokovani Edited 27. Březen, 2018 by xhunterx Link to comment Share on other sites More sharing options...
ATomas 291 Odesláno: 28. Březen, 2018 Share Odesláno: 28. Březen, 2018 (upraveno) Citace J, ono by to mozno chcelo si uvedomit, ze to 't' v tom mysql_tquery znamena threaded, nez zacnes tu svoju vecnu kritiku Tento plugin si fici na inom vlakne/vlaknach, aby presne vyriesil tieto tvoje obavy o blokovani Tak to me hodne zajima jak to udelal Protoze moje pokusy o vytvoreni threadu u sa-mp vzdy selhaly Koukam do zdrojaku toho pluginu, a ja tam ten thread proste nevidim, kde tam je ? Edited 28. Březen, 2018 by ATomas Link to comment Share on other sites More sharing options...
xhunterx 55 Odesláno: 28. Březen, 2018 Share Odesláno: 28. Březen, 2018 před 1 hodinou, ATomas said: Tak to me hodne zajima jak to udelal Protoze moje pokusy o vytvoreni threadu u sa-mp vzdy selhaly Tak u mysql je to ovela jednoduchsie nez u inych veci, kedze synchronizaciu potrebujes len na zaciatku a na konci. před 1 hodinou, ATomas said: Koukam do zdrojaku toho pluginu, a ja tam ten thread proste nevidim, kde tam je ? V tejto funkcii: bool CHandle::Execute(ExecutionType type, Query_t query) A potom v tychto suboroch mas samotnu implementaciu mutexov a threadu: CConnection.hpp a CConnection.cpp Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now