-
Příspěvků
207 -
Registrován
-
Aktivní
-
Vítězných dnů
43
Content Type
Profiles
Forums
Calendar
Gallery
SA-MP
Příspěvky posted by DuFF
-
-
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:Spoilerfunction rieka(x, y, pole) { var vystup = []; for (let i = 0; i < pole.length; ++i) { let arr = []; for (let j = 0; j < pole[i].length; ++j) { arr.push(0); } vystup.push(arr); } rekurzivnaRieka(x, y, pole, vystup); printArray(vystup); } function rekurzivnaRieka(x, y, vstup, vystup) { //console.log(`rekurzivnaRieka(${x}, ${y})`); vystup[x][y] = 1; const smery = [ [0, 1], [0, -1], [1, 1], [1, 0], [1, -1], [-1, 1], [-1, 0], [-1, -1] ]; const validneSmery = smery.filter(smer => { const [xSmer, ySmer] = smer; const noveX = x + xSmer; if (noveX < 0 || noveX >= vstup.length) return false; const noveY = y + ySmer; if (noveY < 0 || noveY >= vstup[noveX].length) return false; return true; }) let minimalnaVyska = vstup[x][y]; for (const [xSmer, ySmer] of validneSmery) { const vyska = vstup[x + xSmer][y + ySmer]; if (vyska < minimalnaVyska) { minimalnaVyska = vyska; } } //console.log(`minimalna vyska: ${minimalnaVyska}`); for (const [xSmer, ySmer] of validneSmery) { const noveX = x + xSmer; const noveY = y + ySmer; if (vstup[noveX][noveY] <= minimalnaVyska && vystup[noveX][noveY] === 0) { rekurzivnaRieka(noveX, noveY, vstup, vystup); } } return vystup; }
Každopádne cool obrázky ako odmena za vypracovanie určite potešili
- 1
- 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.
- 1
-
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...
- 2
-
před 17hodinami, Dave6859 said:
warning 239: literal array/string passed to a non-const parameter
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.
- 1
-
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.
- 3
-
před 11minutami, Dave6859 said:
Díky, ale stále je tu ten problém, že to ta funkce jde použít jen na player model a nejde na zbraně
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).
- 1
-
Asi to bude tým, že nemáš odfajknuté, že chceš vidieť holé ženy
- 1
- 1
-
Skúšal si nejaký z posledných releasov? Napr. 6.13: http://forum.amxbans.net/viewforum.php?f=6
-
On 30. 7. 2022 at 17:49, DuFF said:
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
Dnes som na to dostal odpoveď:
- 1
-
před 41minutami, Hip said:
Čau lidi, stále aktuální, nějaký tipy na aktuální nejlepší streamery?
Č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- 1
-
před 4hodinami, Om3n said:
ok DuFFe, připadam ti teď jako chudák :D
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
- 1
-
Zdravím, skús návody od vEnda:
Prípadne wiki:
https://team.sa-mp.com/wiki/Scripting_Basics.htmlhttps://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í.
- 3
-
před 9minutami, darfexik said:
Napsal jsem "stock sscanf" nic mi to nevyhledalo pak jsem šel do pawno, includes a sscanf a napsal jsem tam "stock sscanf" a vyhledalo mi to tohle https://ctrlv.cz/zrTD
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.
-
před 9minutami, darfexik said:
Ano to už jsem udělal posunul jsem se kousek dopředu, ale ted mi to zase píše tohle esktop\pawno\pawno\include\sscanf.inc(229) : fatal error 111: user error: sscanf (possibly the PAWN version) already defined. https://ctrlv.cz/tXPe
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.
-
před 2minutami, darfexik said:
Zdravím, ještě jednou promin, že pořád otravuju, ale nechápu to co jsi napsal co mám napsat to #define SSCANF_NO_NICE_FEATURES mám odstranit, nebo jak mám to udělat v Pawnu nebo v tom includu? prosím ještě jednou o vysvětlění díky.. o tom článku jsem si přečetl..
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ť.
-
Položka v dialogu skočí na poslední řádek
v Pomoc
Odesláno:
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