Jump to content

DuFF

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

    212
  • Registrován

  • Aktivní

  • Vítězných dnů

    44

Everything posted by DuFF

  1. 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:
  2. 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?
  3. 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/
  4. 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
  5. 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.
  6. V čom je problém? Kickuje ti to botov zo serveru? Čo máš v logoch? Pridal si do server configu bind s IP serveru?
  7. 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
  8. 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
  9. 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.
  10. Plánuješ pridať nejakých botov? Bol som tam na sekundu pozrieť, ale bohužiaľ nebol nikto online, tak som sa veľmi nezabavil
  11. Zdravím, dnes som po dlhšom čase zavítal na web sa-mp.com a v sekcii Downloads ma prekvapila nová verzia klienta 0.3.7-R5. Vyzerá to tak, že vyšla v novembri tohto roku a na ruskom fóre (https://pawn-wiki.ru/index.php?/topic/56298-sa-mp-037-r5-1-klient/) som sa dočítal, že údajne opravuje kritický bug - remote code execution pomocou DIALOG_STYLE_LIST a DIALOG_STYLE_TABLIST. Neviem, ako veľmi je táto informácia dôveryhodná a bližšie detaily o tejto bezpečnostnej chybe som sa nedozvedel. Ak náhodou niekto viete viac, budem rád, keď sa s nami podelíte...
  12. Toto vidíš pravdepodobne kvôli tomu, že používaš pawn compiler od Zeexa, kde sa rieši const-correctness (https://github.com/pawn-lang/compiler/wiki/Const-Correctness), ale používaš a_samp.inc od samp teamu bez nejakých úprav. Pokojne otvor ten include, nájdi v ňom PlayAudioStreamForPlayer a pred druhý parameter (pole s url) dopíš "const". Tento warning inak nesúvisí s problémom, že sa ti neprehráva hudba. Ako píše Hip, PlayAudioStreamForPlayer očakáva link na nejaký zvukový súbor (.mp3, .ogg, ...). Ak chceš prehrať niečo z youtube, musíš to prekonvertovať napr. na mp3, nahrať to niekam na internet a použiť link k tomuto nahranému súboru.
  13. Zdravím, Triadic Operator je operátor s aritou 3. Častejšie používaný výraz je ternary operator. Operátory môžu mať rôznu aritu (počet operandov). Pár príkladov: !isPlayerConnected -> unárny operátor ! (jediný operand je premennná isPlayerConnected) 4 + 7 -> binárny operátor + (dva operandy 4 a 7) Unárnych a binárnych operátorov v programovaní existuje viac. Napríklad ďalší unárny operáror je - vo výraze -42. Príkladom ďalších binárnych operátorov je väčšina aritmetických (+, -, *, /), logických (&&, ||) alebo relačných (>, >=, <, <=, ==, !=) operátorov. Ternárny však poznáme iba jeden (operátor ?:). Ukážem ho na výraze: new jailTime = IsPlayerVIP(playerid) ? 300 : 600; Do premennej jailTime sa uloží hodnota 300 ak je výraz IsPlayerVIP(playerid) pravdivý výraz, inak 600. Chová sa to rovnako ako nasledovný kód: new jailTime; if (IsPlayerVIP(playerid) { jailTime = 300; } else { jailTime = 600; } Je to teda in-line verzia podmienky v tvare: výraz ? výsledok-ak-výraz-platí : výsledok-ak-výraz-neplatí Hodí sa to hlavne v prípade, keď sú výrazy jednoduché a rozpisovanie pomocou podmienky by bolo zbytočne zdĺhavé. Na záver ešte spomeniem, že ternárne operárory môžu byť aj vnorené, napríklad vo výraze: new jailTime = IsPlayerAdmin(playerid) ? 0 : IsPlayerVIP(playerid) ? 300 : 600; Ale v takýchto prípadoch býva zvyčajne lepší nápad prepísať to klasicky pomocou podmienok kvôli oveľa lepšej čitateľnosti kódu.
  14. DuFF

    pomoc Neon Katana

    Proste hráčovi givneš katanu, vytvoríš nejaký svietiaci model a pripevníš ho hráčovi na ruku tak, aby to vyzeralo, že svieti katana
  15. DuFF

    pomoc Neon Katana

    Vyskúšaj https://team.sa-mp.com/wiki/EditAttachedObject.html Dovolí ti to posúvať/naťahovať/rotovať objekt v hre a keď skončíš, môžeš si uložiť/vypísať offsety v callbacku https://team.sa-mp.com/wiki/OnPlayerEditAttachedObject.html Tieto údaje môžeš potom použiť v SetPlayerAttachedObject. Nezabudni na správne boneid, kam chceš objekt pripevniť - pre katanu chceš asi pravú ruku (boneid 6).
  16. Asi to bude tým, že nemáš odfajknuté, že chceš vidieť holé ženy
  17. Skúšal si nejaký z posledných releasov? Napr. 6.13: http://forum.amxbans.net/viewforum.php?f=6
  18. Dnes som na to dostal odpoveď:
  19. Čau, rekordný bump úspešne prekonaný :D Stále by sa mal používať Incognitov: https://github.com/samp-incognito/samp-streamer-plugin/releases Ale popravde som nikdy netestoval, ako sa chová, keď máš viac ako 1000 objektov na jednom mieste a potrebuješ ich všetky zobraziť jednému hráčovi
  20. Neber to nijak zle :D Ja som mal iba zlý pocit z toho, že by som bez tohto fóra urobil pár životných rozhodnutí inak, nie nutne lepšie, a že som mu to ešte dostatočne nesplatil pridaným obsahom
  21. Zdravím, skús návody od vEnda: Prípadne wiki: https://team.sa-mp.com/wiki/Scripting_Basics.html https://team.sa-mp.com/wiki/Control_Structures.html https://team.sa-mp.com/wiki/Category_Tutorials.html Mne zo začiatku tiež veľmi pomohlo snažiť sa pochopiť scripty/módy od iných ľudí.
  22. DuFF

    pomoc Gamemode

    Skús ešte raz poriadne prekontrolovať, či niekde v móde nemáš kód, ktorý vyzerá nejak takto ("stock" tam nemusí byť): https://team.sa-mp.com/wiki/Sscanf_code.html Ak nič nenájdeš, skús includovať sscanf hneď po a_samp, aby sa vylúčila možnosť, že sscanf definuje nejaký z tvojich includov, ktoré includuješ skôr.
  23. DuFF

    pomoc Gamemode

    Máš v móde sscanf definovaný ako funkciu? Ak vyhľadáš "stock sscanf", nájde ti to niečo? Ak áno, celú tú funkciu môžeš vymazať. Toto je pozostatok z čias, keď na sscanf ešte neexistoval plugin, a teraz sa to bije.
  24. DuFF

    pomoc Gamemode

    Vložiť do .pwn súboru módu pred riadok, na ktorom máš #include <sscanf>
  25. DuFF

    pomoc Gamemode

    Toto vyrieši tvoj problém: Najjednoduchšie bude pre teba urobiť presne to, čo ti píše chybová hláška: Vlož do módu (pravdepodobne pred include sscanf) riadok #define SSCANF_NO_NICE_FEATURES, čím zakážeš nejaké featury, ktoré nie sú kompatibilné s kompilerom poskytnutým samp teamom. Nepovinné: Ak by si chcel do budúcna prejsť na komunitný kompiler (doporučuje sa), ktorý má zaujímavé featury a opravené bugy, môžeš si o tom prečítať tu: https://github.com/pawn-lang/compiler Pravdepodobne však narazíš problémy spojené s const correctness. Táto téma sa tu už tiež x-krát riešila a je o tom pekne písané aj na wiki githubu, ktorý som poslal
×
×
  • Create New...