MaziLOCO 0 Odesláno: 15. Leden, 2023 Share Odesláno: 15. Leden, 2023 .Čau čau dufam že nerušim ?. Potreboval by som pomoct. Chcem spravit prikaz /warp [vzdalenost] ale neviem ako nastavím to aby ho to spawnulo o tu danu hodnotu pred seba. Ďakujem PAWNO Link to comment Share on other sites More sharing options...
Globální moderátor Hip 191 Odesláno: 15. Leden, 2023 Globální moderátor Share Odesláno: 15. Leden, 2023 Ahoj, je to trocha matematiky. Pro začátek budeš potřebovat směr, kterým se koukáš: https://sampwiki.blast.hk/wiki/GetPlayerFacingAngle a svojí pozici: https://sampwiki.blast.hk/wiki/GetPlayerPos Co známe: Aktuální pozici, vzdálenost warpu a směr kterým se kouká. Aktuálně pozice je pro výpočet irelevantní, vynecháme vzdálenost a směr kterým se kouká je užitečný při použití goniometrických funkcí: https://cs.wikipedia.org/wiki/Goniometrická_funkce Dle obrázku si představ, že ty jsi v levém rohu a znáš směr a vzdálenost, což je strana c. (Je to pravoúhlý trojúhelník) Znáš vzdálenost přepony a úhel. (GetPlayerFacingAngle). Díky tomu můžeš vypočítat stranu "b", takže se použije funkce cosinus kdy: cos(α) = b/c b = cos(α) * c v tomto případě je b vzdálenost nové pozice od tvé stávající. Hodnotu "a" vypočítáš už klasickou pythagorovu větou: c^2 = a^2 + b^2 a = sqrt(c^2 - b^2) výpočtama získáš tvé posunutí vůči aktuální pozici. Pak je stačí sčítáním dopočítat a nastavit hráči novou pozici. Hráčovu pozici nastavíš přes https://sampwiki.blast.hk/wiki/SetPlayerPosFindZ jelikož neznáš Z level kam se warpoval. Nezapomeň správně přičítat nebo odečítat souřadnice podle toho kam se kouká (GetPlayerFasingAngle). Souřadnice sčítáš pouze pokud se hráč kouká někam mezi severem a východem. Pokud se bude koukat jiným směrem, musíš vymyslet, jak budeš výpočet počítat. Do goniometrické funkce můžeš dát maximální hodnotu 90 (stupňů). Jedna varianta je ta, že si vždy úhel snížíš o hodnotu kolik ti přebejvá: Úhel 120, odečteš 90 a máš 30 - můžeš použít do funkce. Úhel 195, odečteš 180 a máš 15. 310 odečteš 270 a máš 40. Pak můžeš použít výpočet výše ale jak jsem zmínil, musíš si dávat pozor jak vypočítaný souřadnice k sobě přičteš/odečteš. Jinak se budeš warpovat o správnou vzdálenost, ale špatným směrem Link to comment Share on other sites More sharing options...
MaziLOCO 0 Odesláno: 16. Leden, 2023 Author Share Odesláno: 16. Leden, 2023 On 8. 10. 2014 at 13:36, Polis_Polismanovic said: Ďakujem za vysvetlenie ale som stoho fakt že deb*l ja by som to musel vidiet na tom tutorialu aby som to pochopil sin cosin tomu nechapu. Ale ďakujem za snahu Link to comment Share on other sites More sharing options...
DuFF 85 Odesláno: 21. Leden, 2023 Share Odesláno: 21. Leden, 2023 (upraveno) 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. Edited 21. Leden, 2023 by DuFF zlý odsek 1 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now