Jump to content

NeoRevCrew

Uživatel
  • Příspěvků

    11
  • Registrován

  • Aktivní

  • Vítězných dnů

    1

NeoRevCrew last won the day on 14. Srpen 2017

NeoRevCrew had the most liked content!

Reputace

4 Jonny Sindacco
  1. NeoRevCrew

    script Savecar

    Ahoj, myslím, že by ti bohatě mohlo stačit něco z prvních odkazů: http://lmgtfy.com/?q=samp+tuning+saver+fs
  2. No, fuha, teď mě nenapadá žádné elegantní řešení, jak to dát do toho tvého kódu a zároveň z toho neudělat totální hnus. Tady už bych určitě (alespoň já osobně) použil tu proměnnou na názvy levelů: no a potom bych cyklus nahradil tímto: Jinak možná by sis měl upravit velikost řetězce line (56 bych řekl, že by mohlo stačit), a jako bojový úkol by sis mohl udělat ten počet online adminů do globální proměnné, to bys mohl zvládnout.
  3. Všude, kde je "adminscount" přepiš na "adminsonline".
  4. Ahoj, problém je především v tom, že vždycky přepíšeš obsah řetězce "string". Proto se ukáže vždycky hráč s nejvyšším id, který má nějaký level. Toto by měla být funkční napodobenina tvého kódu: Osobně bych ti ale dal pár rad, protože toto se mi zdá jako dost odporné řešení, jednak bych udělal nějakou globální proměnnou, kam by se ti (například při přihlášení - odpojení) ukládali admini, kteří jsou online, potom bych dal na první místo podmínku, pokud vůbec na serveru nějaký admin je, kterou jsem v případě, který jsi zamýšlel ty, dal až na konec kódu, což je naprostá zbytečnost, protože určitě nastane situace, kdy admin není online, hráč dá příkaz /admins a zbytečně se vytváří proměnné, které ani de facto nejsou použity. Další taková rada je, aby sis názvy těch levelů uložil do proměnné, potom bys jednoduše použil podmínku, pokud má dotyčný větší level než 0, a pokud ano, tak by se už ta hodnost načetla sama při formátování. Doufám, že ti alespoň trochu pomohlo.
  5. Teď si sám moc nejsem jistý, jak by to mělo fungovat, Duffe. Pokud by to neměl jako globální ale jako lokální, tak by se mu vždy vytvořila nová proměnná, a já předpokládám, že to je ten slavný HS, který při spuštění zavolá několik-set krát fci na vytvoření domů, vždy by se mu teda vrátila hodnota 1 (nová proměnná na začátku + 1 na konci fce). K tomu pokud by dělal nějaké příkazy na přidání či odebrání domů, tak by se mu hůř pracovalo s počtem již vytvořených domů. Nebo mi něco ušlo?
  6. Ahoj, zkus new INI:File = INI_Open(s); Jinak podle mého je zbytečně velká délka řetězce.
  7. NeoRevCrew

    script [inc] ReturnDate

    UPDATE 1.2 - DŮLEŽITÉ ​Zdravím, dnes jsem se opět dostal k počítači a chtěl ještě dovést tento include k ještě větší "dokonalosti", než tomu bylo doteď. ​ ​Dělal jsem test počátečních roků (od kterých funkce počítala) 2006 - 2017 a zjistil jsem (bohužel až nyní), že každý přestupný rok má o 1 den více (pokud byl počáteční rok nastavený před rokem 2013). ​V této verzi je již tato chyba opravena a obsahuje další úpravy: - Upravená kontrola přestupného roku (na základě poznámky od Printa), ​- upravený výpočet dní, - upravený výpočet roků (změněný cyklus). Tato verze je samozřejmě opět rychlejší, než dosud vydané verze 1.0 a 1.1. Nyní průměrná rychlost při cyklu 1.000.000 je 555 ms. Aby bylo možné zajistit rozdíl mezi verzemi 1.1 a 1.2 jsem již musel použít cyklus opakující se 5.000.000x, kde byla verze 1.2 rychlejší o něco málo přes 1600 ms (1.1: 3815 | 1.2: 2168). Současná verze by již měla být bez jakýchkoliv bugů.
  8. NeoRevCrew

    script [inc] ReturnDate

    Od pawna se odradit nenechám, tak nějak svým tempem již pár let tomu snažím věnovat. Jednak ti děkuju za takovou reakci. Co se té inspirace týče, tak původně ne, až ta podmínka kontrolující 366 dní, pak jsem zjistil, že to mám jak v originálu. Ono totiž ze začátku celá tato funkce vypadala úplně jinak, ale postupně jsem vše upravoval a vznikl z toho současný výsledek. Ano, dělal jsem to přes online kalkulačku na GMT, protože je na netu plno takových, kde se různě nastavuje a nechtěl jsem si dovolit chybu. Definice nepoužívám, v tomto případě šlo o zjednodušení úpravy ostatním, co by nemuseli vědět kde, co a jak přepsat. Každopádně definice nemají stejné názvy jako použité proměnné. Právě já jsem zkusil nahradit if+goto cyklem, ve kterým byl i switch na daný měsíc, ale vždy se při testu dostala rychlost nad 1100 ms, kdežto současná verze okolo 950 ms. V módu používám především switche, if vždy na ojedinělé případy, ale zde to na rychlost opravdu polepšilo stylu if + goto. V includu komentáře byly, ale mám pocit, že ve verzi 1.1 jsem je neměl. Ale nejspíš to nebylo poslední vylepšení funkce, vždy se něco najde, takže pak dodám.
  9. NeoRevCrew

    script [inc] ReturnDate

    S dovolením, prvně se vyjádřím k Tangovi. ​A proč ty píšeš takový příspěvěk? Ano, ty jsi třeba génius, kterýmu to hned dojde, ale může tu být někdo, kdo tomu třeba hned neporozumí a tak mu mile rád (třeba za nějakou dobu, kdy se podle pravidel, mám ten pocit 30 dní+, nemá do diskuze zasahovat) poradím. Já sám jsem timestamp pochopil až po půlroce (jsem blesk no, ale bohužel jsem tomu prostě nerozuměl hned ), co jsem se začal učit s pawnem, a teprve loni jsem se po hodně dlouhé době rozhodl s tím zkusit pracovat. Takže sice ty bys to napsal tak geniálně, že by to každý pochopil, já bohužel ne, proto jsem napsal, aby mě kontaktovali do SZ. Myslím, že tvoje reakce vůbec nemá smysl v tomto případě, protože se nevyjadřuješ k obsahu, ale pouze se snažíš za každou cenu si rýpnout. HighPrinte, tobě mockrát děkuju za takovou reakci, přesně v něco takového jsem doufal, že se najde někdo, kdo případně mě upozorní na nějaké nedomyšlené či špatně promyšlené kousky. Pokusím se reagovat podle tvé osnovy: 1) O tomto jsem nevěděl, protože takový rok už jsem nezkoušel. Testoval jsem roky 2006 - 2028, takže jsem neměl tušení. Děkuju - napravím. 2) Kód jsem dělal včera ve vedru a měl jsem přepařený mozeček (je mi jasné, že to neomlouvá), byl jsem rád, že jsem vymyslel ten cyklus, i když jsem věděl, že to půjde i líp, ale zapomněl jsem na to. Děkuju - napravím. 3) Vím, že if + goto má stejný význam jako cyklus, nechtěl jsem ho ale použít a dělat kontroly, které jsem měl pocit, že by ubraly na rychlosti (ale netestoval jsem, takže otestuju a popřípadě zkusím vymyslet lépe). 4) S tím modulem jsem pracoval pouze jednou a to když jsem to nedávno zkoušel. Proto jsem se neodvážil do toho vůbec jít, každopádně věřím, že by to mohlo být ještě o něco rychlejší. 5) 2 hodiny se odečítají z důvodu středoevropského času. Docílí se u funkce tak vždy aktuálního času. 6) Při prvním testu mělo hodně vliv na výsledné datum, když se změnila podmínka if(py == 1) až po if(py == 4). Původně šlo o přestupný rok, jenže tam pak na mě byla nějaká zrada a udělal jsem to takhle. Ještě na to mrknu. Kód, se kterým jsem to testoval zkusím najít, 2 testy byly totiž prováděny na localhostu (1. a 3.), 2. na serveru. UPDATE 1.1 Drobný update, odrážející se především ve zrychlení funkce (z průměrné rychlosti 1423 ms zlepšeno na 978 ms). Úpravy se týkaly pouze změny výpočtu hodin, minut a sekund a úprava kontroly měsíců. Opět test rychlosti opakující se 3x s cyklem 1.000.000: ReturnDate: 994 | 972 | 967 ms (průměr: 978 ms) Abych se ještě vrátil k diskuzi výše: - Změna cyklu při přičítání 1 dne každé 4 na výše zmíněný výpočet nefunguje tak zcela přesně (v dalších letech je ztráta 1 dne, testován rok 2037). - Situace, kde se odečítalo 366 dní byl vlastně původem přestupný rok s tím rozdílem, že se prováděla kontrola k nejbližšímu přestupnému roku - původně mám pocit tam byla ztráta prvně po 4 poté po 2 a poté po 1 roce. Když jsem podmínku změnil na if(py == 1) a přidal cyklus pro přičtení dne každé 4 roky už nebyla žádná ztráta. - Dále jsem zkusil dle HighPrintova nápadu změnit kontrolu měsíců přes cyklus, kde se ovšem funkce mírně zpomalila (průměr: 1137 ms).
  10. NeoRevCrew

    script [inc] ReturnDate

    ReturnDate ​Převod časové známky na datum ​Zdravím, rád bych vám představil moji verzi převodu timestampu na datum - ReturnDate. ​Předem bych chtěl skutečně poděkovat za pozornost a trpělivost při čtení tohoto dlouhého příspěvku, snažil jsem se zkrátit jej co nejvíce to jen šlo tak, aby to bylo pochopitelné a mělo to hlavu a patu. ​V případě problémů či potřeby rady se nebojte mě kontaktovat zde či prostřednictvím SZ. Soubor ke stažení zde. ​Proč jsem udělal vlastní verzi? ​Vyvíjím vlastní mód, kde krom pluginů nepoužívám cizí funkce, vždy se snažím udělat vše po svém tak, aby to bylo rychlejší a pokud možno tak i zatěžovalo míň RAM či CPU než verze z internetu. Je sice pravda, že já testuju funkce v cyklu opakující se 1.000.000x (abych zajistil rozdíly) a v praxi se vyvolá tak jedou, možná 2x 3x, ale nemění to nic na tom, že kód musí být nepřehledný a zbytečně komplikovaný, když to jde jednoduše. V tomto případě jsem se po zkušenostech a používání funkcí TimestampToDate a 'date', které mi často ukazovaly trochu jiný datum než měly, že udělám vlastní převod na datum. ​Jaký je rozdíl mezi původními a touto verzí? ​Tato verze nepoužívá zbytečně dvourozměrné proměnné (do kterých se ukládá 12 měsíců, ke každému 2 možné počty dní v měsíci a časová známka) jako je tomu u původních verzí. ​Dalším a hlavním rozdílem je to, že se časová známka nebere od 1.1.1970 00:00:00, ale od předem nastaveného začátku roku. ​Například první registrovaný hráč X bude dne 12.1.2017 (čas není důležitý) a vím, že server nebude už ukládat žádná starší data, ale vždy už jen novější (později registrovaní, timeban,..). ​Proto v includu nastavíme FYear jako 2017; FStamp jako časovou známku pro půlnoc 1.1.2017 (možné získat ZDE, je potřeba k výslednému timestampu přičíst 7200 -> 2 hodiny, SEČ). Při vyvolání funkce se jakoby už přeskočí k té zadané části, kterou je v tomto případě začátek roku 2017 a pokračuje už výpočet ze zbylé časové známky. Prvně se začne cyklit odčítání roku (pokud je minimálně 1 rok k dispozici), dále pokračuje na zjištění měsíců (v tomto kroku není udělaný cyklus, ale jelikož víme, že už zbývá 12 měsíců tak je po jednom prověříme, pokud se zjistí, že už není další k dispozici, přeskočí se na klasické cykly, které dopočítají dny, hodiny, minuty a zbytek jsou sekundy. ​Výhody a nevýhody? ​Výhodami této verze je rychlejší provedení a menší využití paměti RAM. ​Nevýhodou je, že funkce nezjistí starší data než od definovaného v includu (čímž se vlastně zajistí to rychlejší provedení). ​​Test rychlosti ​Porovnal jsem rychlost všech 3 funkcí v cyklu 1.000.000 - ReturnDate, TimestampToDate a date. ReturnDate: 1749 | 709 | 1809 ms (průměr: 1423 ms) TimestampToDate: 3568 | 2167 | 3454 ms (průměr: 3063 ms) date: 37637 | 9752 | 37344 ms (průměr: 28245 ms) ​Shrnutí funkce ​Abych tedy shrnul použití této funkce. ​Přidejte soubor returndate.inc do složky pawno\include. ​V souboru dle vlastních potřeb upravte FYear a FStamp. ​FStamp si můžete obstarat ZDE, zadáte jako datum 1.1. (rok podle FYear) - čas 00:00:00. ​Z timestampu, který vám vygeneruje musíte odečíst 7200 (to jsou 2 hodiny, kvůli SEČ). ​Výslednou hodnotu nastavíte k definici FStamp. ​Příklad, jak získat FStamp a FYear je zde.
×
×
  • Create New...