Jump to content

DuFF

Přispěvatel
  • Příspěvků

    203
  • Registrován

  • Aktivní

  • Vítězných dnů

    40

Everything posted by DuFF

  1. Tento istý stock nie, pretože v ňom "natvrdo" používaš "pVodickyB". Ideálne by si mal spraviť stock, ktorý dostane ako parameter číslo 0/1 reprezentujúce, či hráč vlastní/nevlastní daný preukaz, a vráti text "Vlastni"/"Nevlastni". Napríklad: stock VlastniPreukaz(vlastni) { new text[10]; if (vlastni) text = "Vlastni"; else text = "Nevlastni"; return text; } // Použitie v kóde: VlastniPreukaz(PlayerInfo[playerid][pVodickyB]) // Alebo pre iný preukaz: VlastniPreukaz(PlayerInfo[playerid][pZbrojny])
  2. Warning je spôsobený tým, že lokálna premenná "autoskolabb" má rovnaký názov ako stock "autoskolabb". Jedno z nich premenuj a warning by ti mal zmiznúť. K Hipovej odpovedi: Pawn compiler poskytnutý v zipe so serverom od sa-mp teamu má problémy s vracaním "string literal" - prestane reagovať. Mám pocit, že to je už vyriešené v compileri od Zeexa, ale nie som si istý.
  3. Toto je fakt na samostatný topic a rovno prilož aj kód
  4. Ahoj, čím skôr sa naučíš správne formátovať svoj kód, tým menej podobného utrpenia zažiješ v budúcnosti. Dobrá prax je posunúť telo bloku - to medzi { a } - o 1 tabulátor (alebo 4 medzery) doprava. Potom vždy ľahko vidíš, ktorá zátvorka uzatvára ktorý blok a vieš ľahšie vložiť kód do správnej časti. Porovnaj svoj kód s formátovanou verziou v spoileri. Čo z toho sa ti ľahšie číta? Na záver ešte dodám, že keď už máš v OnDialogResponse switch na dialogid, tak ho kľudne využi a pridaj do neho ďalšie možnosti (case DIALOG_WARPY, case DIALOG_AUTOSKOLA). Môžeš sa tak vyhnúť zbytočným ifom.
  5. Pokiaľ viem, team open.mp zatiaľ riešil iba náhradu samp serveru a ku klientovi sa ešte nedostali. Toto bol problém v klientovi.
  6. Ak to niekoho stále zaujíma, dnes som narazil na pekný článok o RCE, čo bolo fixnuté v R5: https://www.blast.hk/threads/204306/
  7. Ahoj, skús drobnú úpravu v OnDialogResponse: if (dialogid == REG_DIALOG) // Všimni si, že som odstránil && response==1 z podmienky { if (!response) // Ak hráč stlačí pravé tlačítko dialogu (v tvojom prípade "Ukončit"), response má hodnotu 0 { // Sem vlož kód na zobrazenie registračného dialogu alebo kicknutie hráča zo serveru return 1; } if(strlen(inputtext) == 0) { SendClientMessage(playerid, B_CERV, "[ ! ] Moc kratke heslo!"); new message[256]; format(message, sizeof(message), "\n\n{FFFFFF}Vítaj {00FF00}%s{FFFFFF} na servery {00FF00}Realný Svet\n\n{FFFFFF}Pre registraciu si zvol {FF0000}Heslo\n\n", Jmeno(playerid)); ShowPlayerDialog(playerid, REG_DIALOG, DIALOG_STYLE_PASSWORD, "Registracia", message, "Prihlásit", "Ukončit"); } else { if (udb_Create(Jmeno(playerid),inputtext)) { new message[256]; format(message, sizeof(message), "\n\n{FFFFFF}Vítaj {00FF00}%s{FFFFFF} späť na servery {00FF00}Realný Svet\n\n{FFFFFF}Pre prihlásenie zadaj {FF0000}heslo!\n\n", Jmeno(playerid)); ShowPlayerDialog(playerid, LOG_DIALOG, DIALOG_STYLE_PASSWORD, "Prihlasenie", message, "Prihlásit", "Ukončit"); } else { new message[256]; format(message, sizeof(message), "\n\n{FFFFFF}Vítaj {00FF00}%s{FFFFFF} na servery {00FF00}Realný Svet\n\n{FFFFFF}Pre registraciu si zvol {FF0000}Heslo\n\n", Jmeno(playerid)); ShowPlayerDialog(playerid, REG_DIALOG, DIALOG_STYLE_PASSWORD, "Registrace", message, "Prihlásit", "Ukončit"); } } }
  8. Áno, to by malo fungovať (za predpokladu, že SeskokTopName má fakt 2. rozmer o veľkosti aspoň 250)
  9. Ahoj, ak používaš sscanf2, musíš pri stringoch uvádzať aj ich dĺžku. Ak máš teda v kóde new msg[50], použi if(sscanf(params, "s[50]", msg)). Viac nájdeš na: https://sampforum.blast.hk/showthread.php?tid=570927 v časti o stringoch.
  10. Ahoj, predpokladám, že v scriptoch, kde máš goto/warpy, sa používa na zmenu pozície funkcia SetPlayerPos. Potrebuješ docieliť, aby sa pri každom volaní SetPlayerPos aktualizovali hodnoty v premenných xo, yo a zo. Vyriešiš to pomocou tzv. hookovania funkcií. Tanga má o tom návod: https://pawno.cz/index.php?/topic/54592-hookovanie-funkcií-callbackov/ Chceš teda vytvoriť niečo takéto: stock SetPlayerPosEx(playerid, Float:x, Float:y, Float:z) { // Update premenných xo, yo, zo xo[playerid] = x; yo[playerid] = y; zo[playerid] = z; // Volanie pôvodnej SetPlayerPos return SetPlayerPos(playerid, x, y, z); } #if defined _ALS_SetPlayerPos #undef SetPlayerPos #else #define _ALS_SetPlayerPos #endif #define SetPlayerPos SetPlayerPosEx Máš antiairbrk v rovnakom móde/filterscripte ako goto a warpy? Ak nie, pravdepodobne budeš musieť ešte čarovať s includami a CallRemoteFunction.
  11. Za predpokladu, že ten cheat používa rovnakú animáciu skoku ako klasický skok... Po stlačení KEY_JUMP (je jedno, čím hráč skáče, vždy to bude KEY_JUMP) by som kontroloval zmenu hráčovej výšky po ukončení animácie skoku. V OnPlayerUpdate by som si zapamätal hráčovu pôvodnú výšku prvýkrát po stlačení KEY_JUMP. Následne by som čakal, kým hráčovi zmizne animácia skoku (GetPlayerAnimationIndex). Po zmiznutí animácie by som zistil hráčovu výšku znova a urobil rozdiel s pôvodnou výškou. Treba si dať pozor na situácie, kedy hráča počas skoku niečo warpne/počas skoku do neho niečo narazí a odhodí ho, ...
  12. Nefunguje ti klasicky Alt + Enter prepnutie hry do okna? Už si nespomínam, či nejak išlo nastaviť zapínanie hry v režime okna bez 3rd party programov. Každopádne mám radosť, že si našiel riešenie
  13. Sorry, s DXWnd nemám skúsenosti. K čomu presne to potrebuješ? Skúšal si spustiť hru bez toho? Blbne myš aj v tom prípade? Z mojich skúseností problémy s myšou dinput8.dll vždy vyriešilo
  14. Na cleo sa doporučuje verzia hry 1.0 US. Je to akýsi štandard pre módy, ktoré pracujú s pamäťou. Hodí sa to hlavne ak plánuješ nejaké zložitejšie módy do sampu, ktoré vyžadujú sampfuncs. Na sampfuncs potom budeš potrebovať verziu sampu R1. S tým je však aktuálne problém, pretože R1 je deravá (obsahuje RCE - servery ti môžu ovládať PC), takže veľmi nedoporučujem. Našiel som nejaký svoj upload z 2016, kde by mala byť verzia hry 1.0 US a cleo inštalačka, ktorá mi s ňou fungovala bez problémov. Zvyšok súborov v packu môžeš ignorovať: https://mega.nz/file/xBtgTD6J#7rrTPWiyl4-q4XwKbz3BcLvPAPiKX0XcdzOHbxfTcsY Skús a daj vedieť, či ti to fixlo myš
  15. DuFF

    pomoc CPU Error

    CPU Fan Error je problém s chladičom. Podľa 2. fotky to vyzerá tak, že máš 2 chladiče a nedokáže to zistiť rýchlosť jedného z nich. Je možné, že je iba nesprávne zapojený?
  16. DuFF

    brainstorming

    Tak som niečo zbúchal podľa textu, ktorý som napísal vyššie... Nie je to úplne elegantné a neviem, či to poriadne funguje (nemám testy), ale možno ťa to aspoň trochu inšpiruje:
  17. DuFF

    brainstorming

    Začal by som tak, že by som najskôr zistil, ktoré znaky sú nové a uložil by som si ich súradnice do nejakého poľa. Potom by som začal vytvárať pole nových slov... Treba zistiť, či sú nové písmenká položené vertikálne, alebo horizontálne. Ak sú položené vertikálne, pre každý nový znak by som sa pozrel vľavo a vpravo od neho (až do prázdneho miesta alebo okraja hracej dosky). Ak by som našiel aspoň 2 znaky, znamenalo by to nové slovo. Takéto slovo by som pridal do poľa všetkých nových slov vo forme jednotlivých písmenok a príslušných bonusov. Bonusy pre staré znaky by som označil ako typ 0, multiplier 1 (žiadny bonus). Bonusy pre nové znaky sa zistia z tvojho poľa bonusov. Potom by som identifikoval začiatok a koniec slova vo vertikálnom smere - treba si dať pozor na to, že v tomto slove môže byť viac nových znakov, a teda viac bonusov. Toto nové slovo by som reprezentoval rovnakým spôsobom ako predošlé slová a vložil do rovnakého poľa. Ak sú položené horizontálne, postup je analogický s tým rozdielom, že pre každý nový znak sa pozerám hore a dole pre vertikálne slová a potom vľavo a vpravo pre nové horizontálne slovo. Na záver potrebuješ nejakú funkciu, ktorá dostane reprezentáciu nového slova (pole objektov zložených z písmenka, typu bonusu a multiplieru) a vyhodnotí jeho skóre. Túto funkciu aplikuješ na všetky nájdené nové slová a spočítaš súčet. Zajtra k tomu skúsim napísať nejaký kód... Mohol by si zatiaľ priložiť nejaké jednoduché testy, aby som si overil, že mi to funguje správne?
  18. DuFF

    pomoc Dily na vozidla..

    Neexistujú žiadne špeciálne objekty, ktoré idú upevniť na auto. Môžeš ich na auto upevniť všetky a ďalej je to už len o tvojej predstavivosti. Ak hľadáš radlicu: https://dev.prineside.com/en/gtasa_samp_model_id/model/19601-SnowPlow1/
  19. Zdravím, vyzerá to ako zaujímavý problém a pokúsim sa niečo vymyslieť... Zatiaľ zdieľam aspoň hračku, ktorá sa môže hodiť na vizualizáciu pri návrhu generátora: Viete si napísať vlastnú stratégiu generovania bodov - stačí vytvoriť triedu, ktorá obsahuje metódu generatePoint, ktorá vracia súradnice nového bodu. Táto metóda môže tiež ako side-effect napríklad updatovať nejaký váš stav (v prípade DumbGeneratorStategy je to iba posledný bod, ale môže to byť kľudne nejaká kolekcia všetkých bodov atď.), ktorý sa dá použiť na maximalizáciu vzdialenosti medzi generovanými bodmi. // Edit: Napísal som SquareSectorGeneratorStrategy, ktorá by možno mohla stačiť: Funguje tak, že sa kresliaca plocha rozdeľuje na sektory. Začína sa hlavným sektorom, ktorý pokrýva celú plochu. V prípade, že sa do sektoru vkladá 2. bod, sektor sa rozdelí na 4 štvorcové podsektory (ľavý dolný roh, pravý dolný roh, ľavý horný roh, pravý horný roh). Každý (pod)sektor si drží celkový počet bodov, ktoré sa nachádzajú v jeho všetkých podsektoroch (vrátane ich vnorených podsektorov). Tento počet potom zohráva úlohu pri voľbe, do ktorého zo 4 podsektorov sa má bod vložiť. Voľba sa opakuje postupne na nižších a nižších úrovniach, až kým sa nenájde sektor, ktorý neobsahuje žiadny bod. Vtedy sa vygeneruje náhodná pozícia v rámci daného sektoru... Všimol som si, že je trochu problém s tým, keď máš smolu a bod sa vygeneruje presne na hranici sektorov. Susediace sektory o sebe nič nevedia a je možné, že tak skončia 2 body nalepené na sebe. Ak chceš tomuto javu predísť, možno by sa dal upraviť spôsob, akým sa generujú body v najnižšom podsektore, t.j. zmeniť to z úplne náhodnej voľby na nejakú prioritizáciu stredu sektora. Vizualizácia: https://www.youtube.com/watch?v=Y2ehPGPD1ZI&ab_channel=HFCDuFF
  20. DuFF

    pomoc Statistiky

    Predstav si, že máš na serveri registrovaných 1000 účtov. Myslím, že sa zhodneme na tom, že otvárať všetky súbory a čítať z nich dáta pri každom výpise topky nie je najlepší nápad. Rieši sa to tak, že si vytvoríš súbor, v ktorom budú uložené top štatistiky. Potom napríklad v SavePlayer pri ukladaní každého statu pozrieš, či je hráčova hodnota "lepšia" ako topka a ak je, updatuješ hodnotu v súbore s topkami. Aby si nemusel otvárať súbor s topkami pri každom porovnaní, je dobré držať si jeho kópiu v pamäti.
  21. V čom je problém? Kickuje ti to botov zo serveru? Čo máš v logoch? Pridal si do server configu bind s IP serveru?
  22. Ja by som to vyriešil tak, že by som v dialogu zobrazil najskôr všetky dostupné losy a potom všetky kúpené. Najjednoduchšie to budeš mať 2 for cyklami cez všetky losy... V prvom cykle do bufferu nahádžeš všetky dostupné a v druhom všetky nedostupné. Takto zároveň docieliš, že losy v obidvoch skupinách budú v dialogu zoradené podľa čísla losu
  23. S javascriptom nerobím, mám niečo málo cez rok komerčnej praxe v C# (považujem sa za juniora) a neprišlo mi to príliš zložité - do hodiny som to zbúchal. Dešifrovanie zadania som zvládol bez väčších problémov, ale viem si predstaviť, že Češi by z toho neboli nadšení... Najväčšia bolesť bolo asi dodržiavanie názvov funkcií a premenných v slovenčine. Máš k tomu nejaké referenčné riešenie? Celkom by ma zaujímalo aj to riešenie od ChatGPT. Ja som vypracoval toto: Každopádne cool obrázky ako odmena za vypracovanie určite potešili
  24. Zdravím, skúsim trochu doplniť Hipa. Obrázok nižšie predstavuje pohľad zhora. Hráč stojí v bode A a jeho postava je natočená smerom α. Hľadáme súradnice bodu X, ktorý je od hráča (bodu A) vzdialený 2 jednotky smerom α. Pre zjednodušenie súradnicu z ignorujeme; predpokladáme, že body A a X sú v rovnakej výške; zaujímajú nás teda iba súradnice x a y bodu X. Na obrázku sú už všetky hodnoty vyplnené, ale na začiatku poznáme iba hráčovu pozíciu (v tomto prípade [0;0]) a uhol α (v tomto prípade 37°). Zvyšok musíme dopočítať... Začneme tým, že si okolo hráča predstavíme jednotkovú kružnicu (t.j. kružnicu s polomerom 1). Akonáhle vypočítame súradnice bodu B, ktorý je priesečníkom jednotkovej kružnice a úsečky spájajúcej body A a X, dostaneme jednotkový vektor (t.j. vektor dĺžky 1), ktorý potom stačí iba prenásobiť požadovanou vzdialenosťou, pripočítať ho k hráčovej pozícii a dostaneme tak súradnice bodu X. Ako vypočítať súradnice bodu B... Na obrázku je vyznačený pravouhlý trojuholník ABC, ktorý má strany a, b, c. Súradnica x bodu B je zhodná s dĺžkou strany b v trojuholníku. Podobne, súradnica y bodu B je zhodná s dĺžkou strany a. Začnime výpočtom dĺžky strany a... V pravouhlom trojuholníku platí, že sínus uhla = veľkosť protiľahlej strany / veľkosť prepony. V našom prípade to môžeme zapísať takto: sin(α) = a / c. Keďže v našom prípade má prepona (c) dĺžku 1, delenie číslom 1 môžeme vynechať a zjednodušiť to na: sin(α) = a. Po konzultácii s kalkulačkou zistíme, že sínus 37 stupňov; teda dĺžka strany a; je približne 0.6 (ako ukazuje obrázok). Podobne výpočet dĺžky strany b... V pravouhlom trojuholníku platí, že kosínus uhla = veľkosť priľahlej strany / veľkosť prepony. V našom prípade to môžeme zapísať takto: cos(α) = b / c. Keďže v našom prípade má prepona (c) dĺžku 1, delenie číslom 1 môžeme vynechať a zjednodušiť to na: cos(α) = b. Po konzultácii s kalkulačkou zistíme, že kosínus 37 stupňov; teda dĺžka strany b; je približne 0.8 (ako ukazuje obrázok). Získali sme jednotkový vektor (0.8;0.6). V našom prípade nás zaujíma bod vzdialený 2 jednotky, takže k hráčovej pozícii [0;0] pripočítame 2-násobok jednotkového vektoru (0.8;0.6). Dostávame tak súradnice bodu X: [0 + 2*0.8; 0 + 2*0.6] = [1.6; 1.2]. Ak by nás zaujímal bod vzdialený napríklad 5 jednotiek, pripočítal by sa 5-násobok jednotkového vektoru (dostali by sme súradnice [0 + 5*0.8; 0 + 5*0.6] = [4;3]. Ak by si sa chcel hrať s GeoGebrou: https://www.geogebra.org/classic/dfydudkd Ako to bude vyzerať v pawne... stock GetPositionInFrontOfPlayer(playerid, &Float:x, &Float:y, &Float:z, Float:distance = 5.0) { new Float:facingAngle; GetPlayerFacingAngle(playerid, facingAngle); facingAngle += 90.0; // 0° v GTA je sever, ale 0° na obrázku je východ, preto korekcia o 90° GetPlayerPos(playerid, x, y, z); x += distance * floatcos(facingAngle, degrees); y += distance * floatsin(facingAngle, degrees); } CMD:warp(playerid, params[]) { new Float:distance; if (sscanf(params, "f", distance)) return SendClientMessage(playerid, -1, "Usage: /warp [distance]"); new Float:x, Float:y, Float:z; GetPositionInFrontOfPlayer(playerid, x, y, z, distance); SetPlayerPos(playerid, x, y, z); return 1; } Ak chceš, aby sa výška cieľového bodu prispôsobila terénu (aby ťa newarplo do textúry), namiesto SetPlayerPos môžeš skúsiť https://sampwiki.blast.hk/wiki/SetPlayerPosFindZ ako radí Hip, alebo ideálnejšie MapAndreas plugin.
  25. Plánuješ pridať nejakých botov? Bol som tam na sekundu pozrieť, ale bohužiaľ nebol nikto online, tak som sa veľmi nezabavil
×
×
  • Create New...