Jump to content

Meric

Uživatel
  • Příspěvků

    90
  • Registrován

  • Aktivní

Příspěvky posted by Meric

  1. Jo, díky. To se určitě hodí. Jen mám ještě problémy s nastavením souřadnicí, kam to spawnout, když tu bednu vytvářím. Dal jsem to na svojí pozici po getnutí mých souřadnic. Ale když vyplním osu Z, tak místo aby se měnila výška kam se má krabice spawnout, tak se otáčí, jako kdybych měnil rotaci, nebo se ani nehne. Ty krabice jsou prostě dělaný tak, že když se objeví ve vzduchu a když se do nich strčí, spadnou.

  2. Aha nevěděl jsem, že na to je i SPECIAL_ACTION, díky. A ještě bych se chtěl zeptat. Je nějaký jednoduchý způsob jak mu přes CreateDynamicOBject nacpat tu krabici při té animaci do rukou nebo to musím odhadovat přes například x+0.25 nebo z+0.5?

  3. Popis problému:


    Ahojte, chtěl bych se vás zeptat, jak docílím toho, abych se mohl při animaci pohybovat? Například když chci vytvořit objekt bedny do rukou při animaci. Nikdy jsem nepochopil jak to funguje i když jsem různě měnil hodnoty u funkce ApplyAnimation.


    Chyby/varování kompilátoru a při běhu:
    --

    Kód:

     

    --

     




    Dodatečné poznámky:

    Dále nevím proč se nepřehrává tato animace:

    ApplyAnimation(playerid, "GYMNASIUM", "gym_shadowbox", 4.1, 1, 0, 0, 0, 0);

    Používám jí v dialogu při výběru bojového stylu. Podle Wiki je název animace správně. I knihovny, protože knihovna "GYM" mi shazuje hru.

  4. Díky všem, co mi zde pomáhali, zvláštní díky také uživateli xhunterx s nimž jsem problém řešil. Zjistil, že problém je jen v samotné nepřesnosti timerů a "lagy" byly jen zdánlivé. Všem ostatním samozřejmě také díky, stejně byl pravý čas mód i tak optimalizovat, na škodu to vůbec není. :-) Můžete taktéž lock, díky. 

  5. K .inc ano, ale k .pwn bohužel ne. Tady ale kód vidím. Jenom uznávám, že tohle co tu vidím je fakt už pawno nad mojí úroveň znalostí. Jelikož věci z fixes.inc přímo nepoužívám (možná jen nepřímo), tak opravdu nevím kde může ta chyba být. Tento kód je sakramentsky dlouhý a pro mě skoro nesrozumitelný.

     

    https://github.com/Open-GTO/sa-mp-fixes/blob/master/fixes.inc#L3

     

    EDIT: Ne, vážně ta chyba pocházela z timerfix.inc, který jsem ukazoval výše, proto netuším.


    Problém vyřešen, stáhnul jsem odjinud timerfix. Celý problém spočíval v tom, že mi k tomu inc. nepřibalili .dll abych to použil jako plugin v server.cfg, můžete lock. A díky za aktivní pomoc. :-) 

  6. Tady je serverlog, co to vypisuje. S tím shadow preceding level si to vydealuju později. Souvisí to s tím includem timerfix.inc

     

    [21:16:25] AMX (35831256) loaded
    [21:16:25]    Error: Function not registered: 'KillPlayerTimers'
    [21:16:25] [debug] Run time error 19: "File or function is not found"
    [21:16:25] [debug]  KillPlayerTimers
    [21:16:25] [debug] Run time error 19: "File or function is not found"
    [21:16:25] [debug]  KillPlayerTimers
    [21:16:25] Script[gamemodes/LS-RP.amx]: Run time error 19: "File or function is not found"
    [21:16:25] Number of vehicle models: 0
  7. To můžu udělat, napadlo mě to. Ale víc mi vrtá hlavou to KillPlayerTimer, který je v tom includu, možná v includu timerfix spíš. Píše mi to, že je to not registered a nevím jak to opravit, kvůli tomu mi to háže error 19 a samotný mód se zkrátka nenačte. Proto já nevím už co s tím dál udělat.

  8. Už jsem to vyřešil tím, že jsem ten includ posadil přímo pod includ a_samp, ale stejně, teď mi to pokazilo mod, protože prej KillPlayerTimer not registered a hlavně v tom includu se objevují chyby, přímo v něm. Je tam, že hour, minute se překrývají. (variable shadows at preceding level), což nevím jak ovlivnit. Celkově mi to mód nepustí.

  9. Popis problému:

    Dal jsem si do pawno kompilátoru dva nové includy, fixes.inc a timerfix.inc. Bohužel fixes.inc dělá scény a vůbec nevím co po mně chce.

     

    Chyby/varování kompilátoru a při běhu:

    F:\Windows servery\Windows server\pawno\include\fixes.inc(3558) : fatal error 111: user error: _ALS_ShowPlayerDialog defined

     

     

    Compilation aborted.Pawn compiler 3.2.3664 Copyright © 1997-2006, ITB CompuPhase

     

     

    1 Error.

     

    Kód:

     

    --

     

     

     

    Dodatečné poznámky:

    --

  10. No já se díval na všechno. Jedno usje nechal server zapnutý asi 4 hodiny a podíval se na výsledek. Někdy u někteých funkcí jako OnPlayerConnect/Disconnect bylo worst time u total time aj 4 nebo 8 sekund. Potom jsem upravil includy tak, aby se nesetkal zcmd s izcmd (nevím proč jsem to tam měl ani) a ještě jsem zapnul case sensitive mod pro izcmd, vše za účelem zrychlení kódu a už to není takové s těmi rozdíly. Teďka mívám worst time u čehokoliv v self time i total time tak něco přes 2 sekundy, někdy 3.

     

    Ale jelikož se mi to zasekává během každých 8 sekund, tak mě napadlo, že se během těch osmi sekund sešlo několik náročnějších timerů a laglo server na několik milisekund. Tak jsem experimentálně zakomentoval všechny opakující se timery a žádný efekt. Po tom, co jsem přidal systém zón, tak to na těch 8 sekund padlo z těch cca 9 - 10 sekund. Je tedy možné, že je to spíš čtením nekvalitního kódu? Je pravda, že na tomto módu jsem i s pawnem začínal, takže začátečnické chyby tam být mohou, jen jsem si jich nevšiml a doteď je nevidím.

     

    Do users používám INSERT jenom jednou v celým ódu, ale UPDATE je tam faaakt hodněkrát a je fakt, že podle jména ukládám hodně, to jo. Zkusím ty indexy. Každopádn tyhle lagy mě docela vytáčej, když nemůžu za boha zjistit, co je příčinou. Timery to očividně nejsou i když to je to jediný, co mi dává smysl.

  11. A kam přesně bych ty indexy měl psát? Nejvíc zapisuji do table users, kde mám asi 120 polí pro hodnoty. A opravdu hodně používám INSERT/UPDATE, o indexování ani transakci jsem v životě neslyšel. Co se týče polí v users, nepočítám ještě asi patnáct tablů, kde se ukládají také různé hodnoty.

     

    EDIT: Právě jsem zjistil, že místo každých 9 - 13 sekund se ten server lagne na několik ms už každých 8, v podstatě přesně. Tak jsem si řekl, že to musí být nějaký timer, ale za boha nevím který timer nebo které timery to mohou dělat. Protože kromě těch, které zkrátka musí být na 1000 ms přesně, tak se žádné nepotkávají.

  12. No, tak přepíšeš akorát písmeno, až to bude vyžadovat DiskB. Taky je možnost, že poodpojíš diskový jednotky, začneš instalaci a až se tě bude ptát na diskB, tak odpojíš obraz, kterej jsi připojil a připojíš DiskB. Mělo by to pak být na stejné diskové jednotce (mechanice) a neměl by být už žádný problém.

  13. Není možný, že DAEMON TOOLS ti vyhodil novou mechaniku? To se stává, pokud neodpojíš první obraz (tedy Disk A) a tak se vytvoří mechanika, kde máš Disk B. Tudíž míst aby to bylo např ta cesta F:/Game/setup.exe, tak to bude G:/Game/setup.exe. Ty to repsektive bude mít na části, Zkus to se tam podívat, kdyžtak to přepiš z toho písmena na další, kde se ten part nachází.

  14. Graf nieje prilis podstatny. Dolezitejsie je asi optimalizovat SQL. Ale este pred tym nez zacnes by si mohol pozriet nie len na % ale aj na average a worst time. To je cas, kolko trva vykonat tu funkciu. Ak sa ti server lagne raz za cas, moze to byt tym, ze sa nejaka funkcia vola malokedy (cize ma male %) ale trva dlho.

     

    Ak potrebujes optimalizovat SQL, tak skus vytvorit indexy, ak ich este nemas. Taktiez ak robis velke mnozstvo INSERT/UPDATE, tak pouzi transakciu. Ak vyhladavas, snaz sa vyhladavat podla veci, ktore su indexovane. To iste zoradovanie. (index v SQL je akysi zoradeny zoznam. Cize ak napriklad vytvoris index na tabulke hracov podla mena, tak sa ulozia abecedne zoradeny podla mena. Vdaka tomu sa v nich rychlejsie vyhladava hrac s urcitim menom a nieje nutne rucne zoradovat. To vyrazne zrychli vykonavanie db_query).

     

    PS: ale neprezen to s prilis vela indexmi, indexy zaberaju miesto a trochu spomaluju insert a update.

     

    Jak takový index vypadá? Já už se v těch pojmech dost ztrácím. Bylo mi zde navrhnuto printfování, abych zjistil, který script mi vyhazuje takové hodnoty nebo které scripty. Ale jestli mám printovat formáty typu UPDATE users SET a INSERT INTO, rozhodně by to trvalo dlouho + bych se v konzoli (cmd řádku) pořádně nedozvěděl asi, co s tím bude. Je i nějaká jednodušší cesta? Klidně můžu poslat celou server.db, jestli byste našli chybu tam, nebo tak. Každopádně ty indexy to je pro mě neznámá, prakticky jsem jen vytvářel table a do něj vložil a pojmenoval pole a tím jsem končil.

  15. Aha, dobře. No, nejvíce podle profileru u Self Time procent bere db_query, tudíž databáze jako taková. 54 a něco %.

     

    Bude stačit takhle v pastebinu? Ten graf se mi za boha nedaří zobrazit. A mohu se prosím zeptat na postup při printfování u toho SQLite? Vím, že se tím asi bude myslet printf(query) například, Musí to být u každé akce, kde se ta databáze nebo ten špatný script vyskytuje, nebo je i jednodušší cesta?

     

    Mimochodem ty lagy u 1 a 2 hráčů jsou minimální, jedna za cca 20 sekund to vidím na ukazateli času, že přeskočí o 2 vteřiny. Je to nepatrný, ale i tak vím, že je to problém a čím víc by tam bylo hráčů, tím horší by to bylo.

     

    https://pastebin.com/Q1Jcnqjg


    Nevím jak s tím printf pracovat co nejjednodušeji, abych to nemusel rozepsat po celým módu. Pokud je to cíl, tak asi dobrá. Ale tady vám ukážu, co mi nejvíc žere nějaký % a celkově.

     

    https://pastebin.com/xzr215d6

  16. SQLite urcite prebiji dini. Do souboru bych ukladal jen nastaveni (server nastaveni?) ale jinak vse rozhodne do db. Ty lagy nastanou randomly po 20s nebo je to presne kazdych 20s (a s kolika hraci pritomni na serveru). Pokud se jedna o tu pozdejsi variantu, tak nejlepe si vse oprintfovat, sledovat real-time log a najit pricinu. Vygeneroval bys graf a hodil ho sem jak to momentalne mas? Jestli to teda ten plugin umoznuje

     

    CallLocalFunction je volani jakekoliv public funkce z daneho scriptu (jestli to dela iZCMD tak je to iZCMD).

     

    Moje dalsi otazky, jak casto si ukladal zbrane? Jak casto spoustis automaticke ukladani uctu?

     

    Hodně věcí ukládám do databáze, informace o hráčích (a hodně, včetně zbraní a timer na drogy a zbraně, nějaké pokuty, timer na vězení etc.), vozidlech, cmdlog, nábytek, pak do jinýho souboru db doplňky (attachnuté objekty na postavu). Ukládám staty tak každých zhruba 10 minut, to je i se zbraněma, včera jsem to propojil kvůli změně z dini na SQLite. Zkusím vyvolat z profileru i graf tedy. Není to asi úplně přesně 20 sekund, to jen přibližně a stačí už když jsem tam sám nebo s jedním člověkem. Ale když jsme tam byli dva, tak to bylo stejný jako bych tam byl sám. Ale nedokážu si představit, že bych tam měl hráčů 20+.

     

    Chtěl bych se zeptat, bylo by lepší to předělat na SQLite Web Browser? Chci se těch lagů zbavit a když jsem četl tvůj topic o SQLite, tak jsi psal, že SQLite je nedokonalý a způsobuje lagy serveru, takže tuším, že je to to, o čem jsi psal. A psát tak velký mód jako je RP, to je jak vidím dost o hubu dávat tam základní SQLite.

    Už mám i ten graf, ale mám ho v textový verzi, v nějaké šabloně. Zkouším to přes Graphviz, ale tomu vůbec nerozumím. Je tam XY .exe souborů a v tom by se nevyznám.

  17. Jo, díky. Funguje to. Jen se chci zeptat, ten CallLocalFunction patří k iZCMD? Znamená to tedy, že mám příliš náročné nebo příliš pomalé kódy na příkazy?


    Btw, dini funguje tak ze pri kazdom jednotlivom čitani otvori subor, cely ho preskenuje kym nenajde to čo hladaš a potom tu hodnotu vrati.

    Ukladanie je ešte lepšie.
    Pri ukladani jednotlivych udajov zasa vytvori prazdnu kopiu suboru do ktoreho zapisuješ (s nazvom "nazov.part"), čita cely povodny subor, po jednom tie riadky prepisuje do novej kopie, pri každom kontroluje či prave dany riadok nechceš zmeniť (so strcmp()). Ked subor dokopiruje, odstrani povodny a znovu to prekopiruje (z nazov.part) do noveho suboru s povodnym nazvom kedze file_rename() v samp neexistuje.

     

    Jestli to správně chápu, tak je dini pomalejší, než SQLite, nebo ne? A navíc křížení dini a SQLite mi už tak říká, že to nebude dělat dobrotu, tak jsem to smazal a předělávám to do SQLite verze. Každopádně samotný db_query jak je vidno tam, tak mi vyhazuje taktéž docela velké čísla. A předělávat celý mód z db na něco jiného .. nevím. Problém musí být někde jinde ohledně těch malých lagů serveru.

  18. Dobrý, už mi to funguje, díky moc. :-) Bylo to tím, že jsem to vypínal na tvrdo. No teď bych jen chtěl vysvětlit, co v tom znamená Total Time, Self-Time a pak ty Ovverall, Average a Worst. Average jako průměrná doba v sekundách a nejdelší doba načítání v sekundách? A hlavně ty procenta mě zajímaj co jsou.

     

    btw mám tam docela dost takových položek: unknown@0004fbf4 a asi nejvíc ze všeho zatěžují server. Znamená to, že se to nestihlo detekovat, nebo to je nějaký cajk, kterej tam jen tak nenajd a tolik žere?


    Akorát je zvláštní, že se mi tam ukazuje například aj Itter_OnPlayerDisconnect a ty unknowny. Jak to můžu srazit?

     

    https://pastebin.com/34b7cqLM

  19. Tento plugin dokaze zistit, ktore funkcie ti zaberaju najviac CPU casu. http://forum.sa-mp.com/showthread.php?t=271129

     

    Skus ho pouzit na svojom servery a zistit, co ti najviac spomaluje, potom ries len to.

     

    PS: Ak pouzivas nejake sialene veci ako YSI, tak ten plugin nieje uplne spolahlivy :/

     

    Ten profiler mám, ale nepochopil jsem moc jak ho používat. Nikde pořádný vysvětlivky. Podařilo se mi ho zandat do módu, dal jsem věci do server.cfg, ale žádná z funkcí, co jsem tam viděl zkrátka nefungovala a tak nevím jak to do pawna zapsat. Dělal jsem to zrovna včera asi od 4 do 6 do rána. Vysvětlíš mi prosím, jak se to po pořádku používá?

  20. Úplně šílené to není ale tak jednou za 20 sekund se server lagne cca na 3 - 5 sekund. Hlavně při odpojování. Ukládání mám přes SQLite. Je tam toho docela hodně, protože v tomto módu ukládám docela hodně informací. Snížil jsem přebytečně velká pole u stringů, přebytečná u query, opakující se timery omezit nelze, protože například vězení a aktualizace reálného času musí oboje počítat na sekundy. Kámoš má asi o 10 000 řádků víc a to má méně mappingu, než já a ani zásek a to má hostovaný na slabším PC (VPS). Já to mám na Windows serveru. Nevím co to může tak zatěžovat. Zjistil jsem, že ukládání zbraní tam mám přes dini, to možná tomu přispívá. Ale rozhodně to nebude celý problém. Každopádně díky. Jestli ještě někdo má nějakej nápad, co by to mohlo dělat, ať napíše. Je to RP server, takže se počítá s tím ,že tam bude hafo věcí.

  21. Popis problému:

    Ahojte, potřeboval bych radu od zkušených. Co všechno způsobuje zásadní zátěž na CPU a RAM v kódu? Kromě timerů. Samotný server dost laguje, má něco přes 30 000 řádků.

     

    Chyby/varování kompilátoru a při běhu:

    Timery jsem srovnal tak, aby se nepotkávaly. Zlepšilo se to, ale není to dostačující.

     

    Kód:

     

    --

     

     

     

    Dodatečné poznámky:

    --

  22. Přilož ještě kód na připojení databáze a mrkni do logu jestli se nevypsal nějakej error asociovaný s SQLite. A ještě i ověření zda-li je uživatel registrovaný.

     

    Zápis do tabulky vypadá v pohodě, jenom taková drobnost. %q bych spíš použil na heslo než na jméno. Znak ' stejně není v sa-mp nicku povolený a rozhodně je natolik limitovaný, aby se podařilo nějak sql_injectnout.

     

    Co myslíš tím kódem na "připojení databáze"? Máš namysli toto? 

     

    Database = db_open("server.db");

     

    Error při spouštění samp-server mi to nevyhodilo. Jinak už mi to jde. Popravdě ani nevím kde byl problém, jen jsem zkopíroval úplně stejnej kód a přepsal jsem ho vložením. Jelikož se tam nezměnila ani čárka, tak nevím. Každopádně jestli víte jak to sepsat tenhle register tak, aby to už takto zbytečně nechybovalo, byl bych rád, snažím se svůj mód trochu optimalizovat snížením počtu opakujících se timerů. 

     

    Stačí to tam vložit a všechny potřebné BB kódy (code i spoiler) se dosadí samy. Příště to tam prosím vlož, ať je to sebedelší, jinak to neschválíme.

     

    Dobře, díky za vysvětlení a hlavně za schválení, příště to bude lepší. :-)

  23. Popis problému:

    Ahoj. nevím si rady s jedním problémem ohledně registrace. Používám SQL databázi na zápis všeho a akorát z nějakého důvodu po registraci na serveru se tam table se jménem, heslem a podobně vůbec nezapíše a po relognutí to chce opět registraci. Je tu někdo, kdo SQL lépe rozumí? Já už s tím docela dlouho nedělal, server jsem zanechal a nepamatuji si toho moc k tomu. Pomůžete mi, prosím?

     

    Kód: https://pastebin.com/YBSsnvne

     

    PS: Promiňte, že jsem nepoužil kolonku kódu. Je toho docela hodně a částečně jsem pozapomněl i něco z BB Code.

     

    Chyby/varování kompilátoru a při běhu:

    --

     

    Kód:

     

    --

     

     

     

    Dodatečné poznámky:

    --

×
×
  • Create New...