Jump to content

DuFF

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

    205
  • Registrován

  • Aktivní

  • Vítězných dnů

    42

Everything posted by DuFF

  1. 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.
  2. Plánuješ pridať nejakých botov? Bol som tam na sekundu pozrieť, ale bohužiaľ nebol nikto online, tak som sa veľmi nezabavil
  3. 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...
  4. 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.
  5. 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.
  6. 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
  7. 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).
  8. Asi to bude tým, že nemáš odfajknuté, že chceš vidieť holé ženy
  9. Skúšal si nejaký z posledných releasov? Napr. 6.13: http://forum.amxbans.net/viewforum.php?f=6
  10. Dnes som na to dostal odpoveď:
  11. Č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
  12. 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
  13. 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í.
  14. 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.
  15. 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.
  16. DuFF

    pomoc Gamemode

    Vložiť do .pwn súboru módu pred riadok, na ktorom máš #include <sscanf>
  17. 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
  18. DuFF

    pomoc Gamemode

    Zo zoznamu, ktorý si napísal, používajú pluginy iba sscanf a streamer. U ostatných by ti mali stačiť tie verzie, ktoré aktuálne používaš. Odkazy: https://github.com/Y-Less/sscanf/releases https://github.com/samp-incognito/samp-streamer-plugin/releases Stiahni si najnovší release, .so/.dll (podľa toho, či ti beží server na Linuxe, alebo na Windowse) daj do serverovej zložky "plugins" a .inc súbory si vlož do zložky "include" do pawna, ktorým následne skompiluješ mód.
  19. DuFF

    pomoc Gamemode

    Mód si skompiloval s includmi, ktorých verzie nie sú kompatibilné s verziami pluginov (.so / .dll) ktoré ti bežia na serveri. Doporučujem ísť na oficiálny github pluginov, ktoré používaš, a stiahnuť si tam najnovší release pluginu spolu s includom. https://github.com/samp-incognito/samp-streamer-plugin/releases
  20. Ak niekomu nastavíš hp na 0 alebo sa zabije sám pádom, ohňom, výbuchom, utopením, ..., počítaj s tým, že killerid je INVALID_PLAYER_ID (65535). Ak používaš index killerid na prístup do nejakého poľa, tak ti to tam spadne na ArrayIndexOfBoundsException. Z tohto dôvodu sa kód, ktorý robí niečo s killerid, zvykne dávať do tela podmienky if (killerid != INVALID_PLAYER_ID). Je možné, že niečo také robíš v UpdatePlayerKills. Inak na odhalenie takýchto chýb určite použi crashdetect plugin
  21. Chcelo sa po tebe, aby si odstránil ten cyklus, ale jeho telo tam nechal (aby sa vykonalo iba raz). V tom tele potom musíš ešte prepísať SCM na SCMTA ako som písal vyššie
  22. Ja som nepochopil ten for cyklus cez všetkých hráčov (v PHY_OnObjectUpdate). Pozerám to síce na mobile o 3 ráno a je veľmi možné, že mi niečo uniká, ale jediný výskyt premennej i vidím v SendClientMessage, čo by si mohol nahradiť SendClientMessageToAll a vonkajší for cyklus by sa dal odstrániť.
  23. DuFF

    pomoc sampfuncs

    To znie ako keby ti to blokoval antivírus
  24. DuFF

    pomoc sampfuncs

    Najčastejšia chyba býva, že človek nemá nainštalovanú samp 0.3.7-R1. Skontroluj si, že máš naozaj verziu R1 a nie nejakú inú.
  25. Zdar, mohol by si ukázať screenshot, ako vyzerá v hre dialog DIALOG_MISE_HOTEL a priložiť aj riadok so ShowPlayerDialog, kde ho zobrazuješ? Používaš tam správny štýl dialogu? Všimol si, že ti na konci tela case DIALOG_MISE_HOTEL chýba return 1, a tak sa ti to môže biť s inými dialogmi.
×
×
  • Create New...