Jump to content
  • 0

pomoc Spawn auta


MajorGames4

Dotaz

11 odpovědí na tuto otázku

Recommended Posts

  • 0

Zjistíš si pozici hráče tudíž new Float:x, Float:y, Float:z, Float:a; GetPlayerPos(playerid, x, y, z); GetPlayerFacingAngle(playerid, a); a vytvoříš vozidlo CreateVehicle(411, x, y, z, a, -1, -1, -1); pak si jen doladíš jestli to chceš vedle nebo před X či Y +2.0 třeba :d

Edited by rEf
Link to comment
Share on other sites

  • 0

Takto to asi nie je správne že? :/ Lebo keď zadám ID, spadne server. (PS: Mám tam pridané definície...)

Spoiler
    new Float:x,Float:y,Float:z;
    gpp(id, x, y, z);
    if(getpm(id) < 10) return scm(id,-1,"[!] Nemáš dostatok peňazí!");
    cv(strval(inputtext),x,y,z,-1,-1,60);
    scm(id,-1,"[!] Tvoje vozidlo bolo úspešne vytvorené!");

 

Edited by MajorGames4
Link to comment
Share on other sites

  • 0

Nechápu moc ty zkratky každopádně x, y, z kde máš angle? :d podívej se na sa-mp wiki jak co funguje ... :d pro vozidlo potřebuješ 4 spawn pozice

Link to comment
Share on other sites

  • 0
před 7 hodinami, MajorGames4 said:

Takto to asi nie je správne že? :/ Lebo keď zadám ID, spadne server. (PS: Mám tam pridané definície...)

  Hide contents
    new Float:x,Float:y,Float:z;
    gpp(id, x, y, z);
    if(getpm(id) < 10) return scm(id,-1,"[!] Nemáš dostatok peňazí!");
    cv(strval(inputtext),x,y,z,-1,-1,60);
    scm(id,-1,"[!] Tvoje vozidlo bolo úspešne vytvorené!");

 

Skus:

new Float:x, Float:y, Float:z; // Souřadnice x,y,z takže kde stojí hráč
new Float:angle;// Souřadnice angle takže pohled

GetPlayerPos(playerid, x, y, z);// Zisti souřadnice hráče
GetPlayerFacingAngle(playerid, angle);// Zisti hračovy pohled

if(GetPlayerMoney(playerid) < 10) return SendClientMessage(playerid, -1, "[!] Nemáš dostatok peňazí!"); // Zisti jestlí hráč má 10$
	
CreateVehicle(strval(inputtext), x, y, z, angle, -1, -1, 60);// Vytvoří auto na pozici x,y,z,angle
SendClientMessage(playerid, -1, "[!] Tvoje vozidlo bolo úspešne vytvorené!"); // Pošle správu                              

Jinak tohle je kod pro playerid tudíž hráč co vyvolává tuhle akci s id a kdyby jsi chtěl pro id který nemá ten kdo to vyvolává tak

 

new ID;

a psát místo playerid - ID

Link to comment
Share on other sites

  • 0
před 7 hodinami, rEf said:

Nechápu moc ty zkratky každopádně x, y, z kde máš angle? :d podívej se na sa-mp wiki jak co funguje ... :d pro vozidlo potřebuješ 4 spawn pozice

On má:

gpp jako GetPlayerPos

getpm jako GetPlayerMoney

cv jako CreateVehicle

scm jako SendClientMessage :d

        

Link to comment
Share on other sites

  • 0

Ak chceš spawnúť vozidlo vždy pred hráča, bojím sa, že sa budeš musieť pohrať s goniometrickými funkciami, pretože v závislosti od rotácie hráča (GetPlayerFacingAngle) budeš musieť upraviť x a y spawnovaného auta.

Dá sa to spraviť tak, že si zistíš rotáciu hráča (angle), vyrobíš si jednotkový vektor v tvare (cos angle; sin angle), ten potom vynásobíš vzdialenosťou, v ktorej chceš mať auto od hráča a pripočítaš ho k súradniciam hráča. Tak dostaneš súradnice auta... 

Potom je tam ešte jeden menší problém s facing angle v GTA, uhly v GTA nejdú v smere ale v protismere hodinových ručičiek, preto mám v kóde používam 360 - angle.

Spoiler

SpawnVehicleInFrontOfPlayer(playerid, model, Float:distance = 2.0)
{
    new Float:x;
    new Float:y;
    new Float:z;
    new Float:angle;

    GetPlayerPos(playerid, x, y, z);
    GetPlayerFacingAngle(playerid, angle);
    
    CreateVehicle(model, x + floatcos(360 - angle, degrees) * distance, y + floatsin(360 - angle, degrees) * distance, z, angle + 90, random(256), random(256), -1);
}

Podobný príklad nájdeš v ukážkovom kóde: http://wiki.sa-mp.com/wiki/Floatsin

Prípadne môžeš využiť funkciu priamo z wiki:

Spoiler

GetPosInFrontOfPlayer(playerid, Float:distance, &Float:x, &Float:y, &Float:z)
{
    if(GetPlayerPos(playerid, x, y, z)) // this functions returns 0 if the player is not connected
    {
        new Float:z_angle;
        GetPlayerFacingAngle(playerid, z_angle);
 
        x += distance * floatsin(-z_angle, degrees); // angles in GTA go counter-clockwise, so we need to reverse the retrieved angle
        y += distance * floatcos(-z_angle, degrees);
 
        return 1; // return 1 on success, the actual coordinates are returned by reference
    }
    return 0; // return 0 if the player isn't connected
}

SpawnVehicleInFrontOfPlayer(playerid, model, Float:distance = 2.0)
{
    new Float:x;
    new Float:y;
    new Float:z;
    new Float:angle;
    
    GetPlayerFacingAngle(playerid, angle);
    GetPosInFrontOfPlayer(playerid, distance, x, y, z);
    CreateVehicle(model, x, y, z, angle + 90, random(256), random(256), -1);
}

Dúfam, že tieto kódy fungujú, netestoval som ich, mali by spawnovať vozidlá pred hráča a v takom uhle, že sa pred hráčom objavia dvere vodiča.

Edited by DuFF
Link to comment
Share on other sites

  • 0

Ja len pre úplnosť, keďže ja by som to nevedel, lebo v škole som nič nerobil..
Sinus/kosinus sa používa pri vyjadrení vzťahu medzi 2 stranami a uhlom medzi nimi v pravouhlom trojuholniku.

Platí, že
sin(θ) = protilahla/prepona
cos(θ) = prilahla/prepona, kde θ (čítaj theta) je uhol
a "protilahla" a "prepona" su dlžky danych stran... (protilahla/prilahla oproti uhlu).

418px-Sinus_und_Kosinus_am_Einheitskreis

 

A teda, pre preponu dĺžky 1 môžeme vety prepísať ako
sin(θ) = protilahla/1 = protilahla
cos(θ) = prilahla/1 = prilahla

Obrázok vyššie tiež môžeš brať tak, že je to pohlad na hráča z vtáčej perspektívy (zhora) a θ je uhol, kam sa hráč pozerá.
Ty teda namiesto vytvorenia auta na hráčovej pozícii, toto auto chceš posunúť po "stranách trojuholníka", aby sa nespawnlo na hráčovi, ale pred ním.

Ako je z kružnice s polomerom 1 zrejmé, protilahla a prilahla budú tiež desatinné čísla medzi 0 a 1.


Toto desatinné číslo následne treba vynásobiť vzdialenosťou (2 metre?) v ktorej chceš od seba to auto vytvoriť.

Tiež keďže samp používa divné uhly, musíš použiť ich záporné hodnoty... Toto bolo také vysvetlenie toho princípu, čo duff myslel. Kódy spomenuté pred ním podľa mňa nie sú správne (ich autori nepochopili ako si to myslel).

Ak máš ešte nejaké otázky, môžeš sa pýtať. :) Niekto určite pomôže.

Edited by Tanga
viac detajlov, snad lepšie
  • Paráda! (+1) 1
Link to comment
Share on other sites

  • 0

Mě jen napadlo že místo toho aby se to vozidlo objevilo před ním nebo vedle to už záleží jak si s tím pohraješ tak bych možná použil PutPlayerInVehicle aby se spawnul přímo v autě :-D Stejně si do toho auta bude sedat. (hádám)

Edited by rEf
Link to comment
Share on other sites

  • 0

Udělám příklad ačkoliv už tam není ani potřeba moc angle no napíšu ti ho tam.

new 
	vozitko, 
	Float:x, 
	Float:y, 
	Float:z, 
	Float:angle;

GetPlayerPos(playerid, x, y, z);
GetPlayerFacingAngle(playerid, angle);
vozitko = CreateVehicle(411, x, y, z, angle, -1, -1, 60);
PutPlayerInVehicle(playerid, vozitko, 0);

Krom toho 60 na respawn je moc málo dej si víc ...

Edited by rEf
Link to comment
Share on other sites

  • 0

Mimo funkce:

GetXYInFrontOfPlayer(playerid, &Float:vx, &Float:vy, Float:vdistance)
{
	new Float:va;
	GetPlayerPos(playerid, vx, vy, va);
	GetPlayerFacingAngle(playerid, va);

	if(GetPlayerVehicleID(playerid))
	{
		GetVehicleZAngle(GetPlayerVehicleID(playerid), va);
	}
	vx += (vdistance * floatsin(-va, degrees));
	vy += (vdistance * floatcos(-va, degrees));
}

A v příkazu:

 

new Float:xyza[4];
GetPlayerPos(playerid, xyza[0], xyza[1], xyza[2]);
GetXYInFrontOfPlayer(playerid, xyza[0], xyza[1], 5.0);
GetPlayerFacingAngle(playerid, xyza[3]);
CreateVehicle(strval(inputtext), xyza[0], xyza[1], xyza[2]+2.0, xyza[3]+90.0, -1, -1, 5000);

 

Edited by ForestCZE
Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...