Portal SAMP
[Ajuda] Spawn em GangZone - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] Spawn em GangZone (/showthread.php?tid=2466)



Spawn em GangZone - k2bi_YT - 10/06/2022

Alguém tem um exemplo de spawn aleatorio dentro de um Dynamic Retactangle?

Obs: não quero deixar já pré definido o spawn, o servidor que vai pegar float aleatoriamente, e ira dar spawn no jogador, esse spawn deve ser aleatoriamente, no entanto deverá ser dentro do Rectangle/Gangzone criado

Obs²: Um exemplo, alguns servidores que possui sistema de airdrop aleatorio, que não existe posições já definidas "aleatoriamente"


RE: Spawn em GangZone - White_Blue - 10/06/2022

Você poderia criar uma array com várias posições ao longo da gangzone, e usando a função Random você poderia usar a array no random para assim formar uma posição pseudo-aleatória.



RE: Spawn em GangZone - Dr Editor - 10/06/2022

(10/06/2022 17:24)White_Blue Escreveu:
Você poderia criar uma array com várias posições ao longo da gangzone, e usando a função Random você poderia usar a array no random para assim formar uma posição pseudo-aleatória.

Isso é justamente o que ele não quer!

@TOPIC

A lógica é simples: A área retangular é baseada em Min X, Min Y e Max X, Max Y.
Com base nisso a coordenada aleatória deve ser baseada em randomizar o valor mínimo com o máximo.


Exemplo de coordenada:
Código:
new Float:minx = 50.0;
new Float:maxx = 100.0;

A posição X deve ser entre 50 e 100, basta randomizar.


RE: Spawn em GangZone - OTAKEIRO - 10/06/2022

Código:
#define iRand(%1,%2) (random(%2-%1)+%1)
#define fRand(%1,%2) iRand(floatround(%1),floatround(%2))

stock SpawnPlayerInArea(playerid, team, skin, STREAMER_TAG_AREA:areaid, Float:angle, weapon1, weapon2, weapon3, ammo1, ammo2, ammo3)
{
    new Float:area_x[3], Float:area_y[3], Float:area_z;

    Streamer_GetFloatData(STREAMER_TYPE_AREA, areaid, E_STREAMER_MIN_X, area_x[0]);
    Streamer_GetFloatData(STREAMER_TYPE_AREA, areaid, E_STREAMER_MAX_X, area_x[1]);
    Streamer_GetFloatData(STREAMER_TYPE_AREA, areaid, E_STREAMER_MIN_Y, area_y[0]);
    Streamer_GetFloatData(STREAMER_TYPE_AREA, areaid, E_STREAMER_MAX_Y, area_y[1]);

    area_x[2] = fRand(area_x[0], area_x[1]);
    area_y[2] = fRand(area_y[0], area_y[1]);
    
    MapAndreas_FindZ_For2DCoord(area_x[2], area_y[2], area_z);
    SetSpawnInfo(playerid, team, skin, area_x[2], area_y[2], area_z, 0.0, weapon1, ammo1, weapon2, ammo2, weapon3, ammo3);
    return SpawnPlayer(playerid);
}
Plugin: streamer, mapandreas


RE: Spawn em GangZone - xbruno1000x - 10/06/2022

(10/06/2022 17:59)Dr Editor Escreveu:
(10/06/2022 17:24)White_Blue Escreveu:
Você poderia criar uma array com várias posições ao longo da gangzone, e usando a função Random você poderia usar a array no random para assim formar uma posição pseudo-aleatória.

Isso é justamente o que ele não quer!

@TOPIC

A lógica é simples: A área retangular é baseada em Min X, Min Y e Max X, Max Y.
Com base nisso a coordenada aleatória deve ser baseada em randomizar o valor mínimo com o máximo.


Exemplo de coordenada:
Código:
new Float:minx = 50.0;
[color=#333333][size=small][font=Monaco, Consolas, Courier, monospace]new Float:maxx = 100.0;[/font][/size][/color]

A posição X deve ser entre 50 e 100, basta randomizar.

O DR Editor foi muito cirúrgico na colocação. Só para complementar, você deve utilizar o mapandreas para encontrar a coordenada Z.

Código:
new Float:pos;
MapAndreas_FindAverageZ(X, Y, pos);
Com o X e o Y o mapandreas irá pegar a coordenada Z exata do chão, impedindo que o jogador/objeto seja criado no limbo ou no céu.


RE: Spawn em GangZone - k2bi_YT - 11/06/2022

Solução de @OTAKEIRO[b][b][url=https://portalsamp.com/member.php?action=profile&uid=146][/url][/b][/b]