-
Příspěvků
205 -
Registrován
-
Aktivní
-
Vítězných dnů
42
Content Type
Profiles
Forums
Calendar
Gallery
SA-MP
Everything posted by DuFF
-
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.
-
Plánuješ pridať nejakých botov? Bol som tam na sekundu pozrieť, ale bohužiaľ nebol nikto online, tak som sa veľmi nezabavil
-
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...
-
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.
-
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.
-
Proste hráčovi givneš katanu, vytvoríš nejaký svietiaci model a pripevníš ho hráčovi na ruku tak, aby to vyzeralo, že svieti 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).
-
Asi to bude tým, že nemáš odfajknuté, že chceš vidieť holé ženy
-
Skúšal si nejaký z posledných releasov? Napr. 6.13: http://forum.amxbans.net/viewforum.php?f=6
-
Dnes som na to dostal odpoveď:
-
Č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
-
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
-
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í.
-
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.
-
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.
-
Vložiť do .pwn súboru módu pred riadok, na ktorom máš #include <sscanf>
-
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
-
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.
-
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
-
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
-
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
-
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ť.
-
To znie ako keby ti to blokoval antivírus
-
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ú.
-
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.