PARTNERI:

* Marketing

-UPOZORENJE-

Samo registrovani članovi mogu da vide/koriste forum u celini.
Prijavite se ili registrujte nalog na Balkan SA-MP forumu.


Autor Tema: [Pomoć] Rand coord po 100ti put  (Pročitano 114 puta)

0 članova i 1 gost pregledaju ovu temu.

Van mreže Nure

Rand coord po 100ti put
« poslato: Januar 13, 2019, 02:09:30 pre podne »
Problem(error/warning): Jel zna neko kako da napravim random 6 coordinata, i kad kuca /drift imam vec odradjeno sve samo mi jo sto treba..
Npr kad to kuca da mu se neka od tih 6 random coordinata pokaze i kad stigne na neku od tih coorda da mu se stavi jedna coordinata koju ja zelim zatim kad to pokupi opet neka od tih 6 coorda i tako 10 puta...?
Dio skripte: [ pawn ]vaš odgovor[ /pawn ]
Debug iz server_log(ukoliko je u pitanju crashanje servera - crashdetect log): [ code ]vaš odgovor[ /code ]
Slika/video ingame problema(obavezno ako je ingame problem): link slike
 

Van mreže // xunder

Odg: Rand coord po 100ti put
« Odgovor #1 poslato: Januar 13, 2019, 02:29:26 pre podne »
// Napravis array u kome ces smjestiti koordinate drifta
static const Float: drift_coordinates[][3] {
{ 0.0, 0.0, 0.0 },
{ 0.0, 0.0, 0.0 },
{ 0.0, 0.0, 0.0 },
{ 0.0, 0.0, 0.0 },
{ 0.0, 0.0, 0.0 },
{ 0.0, 0.0, 0.0 }
};

// Ovaj array ces koristiti da znas na kom je CPu igrac trenutno - odnosno u koji cp treba da "udje"
static player_drift_cp[MAX_PLAYERS] = { -1, ... };

CMD:drift(playerid, params[]) {
// Biras random index iz arraya drift_coordinates
new const random_idx = random(sizeof drift_coordinates);

// Postavljas CP igracu iz arraya drift_coordinates i indexa random_idx
SetPlayerRaceCheckpoint(playerid, 2, drift_coordinates[random_idx][0],  drift_coordinates[random_idx][1],  drift_coordinates[random_idx][2], 0.0, 0.0, 0.0, 5.0)
player_drift_cp[playerid] = random_idx;
return 1;
}

public OnPlayerEnterRaceCheckpoint(playerid) {
// Ako je igrac u drift modu (koji se aktivira kada kucas /drift)
if (player_drift_cp[playerid] != -1) {
// Uzimas mu koji drift cp treba da uzme
new const curr_drift_cp = player_drift_cp[playerid];

// Ako je usao u RaceCP i blizu je CPa koji treba da uzme (ovo sam uradio zbog citera koji mogu da salju sync CP)
if (IsPlayerInRangeOfPoint(playerid, 5.0, drift_coordinates[curr_drift_cp][0],  drift_coordinates[curr_drift_cp][1],  drift_coordinates[curr_drift_cp][2])) {
// Dodjeljujes mu novi index iz arraya drift_coordinates
new random_idx = random(sizeof drift_coordinates);

// Ovo sam uradio kako ti se ne bi jedan CP ponovio 2 puta
// Jednostavno prevedeno: dok je random_idx jednak curr_drift_cp biras novi random_idx
while(random_idx == curr_drift_cp) random_idx = random(sizeof drift_coordinates);

// Zatim mu opet postavljas novi race checkpoint
SetPlayerRaceCheckpoint(playerid, 2, drift_coordinates[random_idx][0],  drift_coordinates[random_idx][1],  drift_coordinates[random_idx][2], 0.0, 0.0, 0.0, 5.0)
player_drift_cp[playerid] = random_idx;
}
}

return 1;
}
 

Van mreže Nure

Odg: Rand coord po 100ti put
« Odgovor #2 poslato: Januar 13, 2019, 15:01:05 posle podne »
da znam,samo sto sam ja hteo da kad pokupi taj random cp da mu se seta jedan cp koji ja zelim neku coordinatu i kad pokupi tu coordinatu koju sam ja zeleo da mu opet seta random.
 

Van mreže // xunder

Odg: Rand coord po 100ti put
« Odgovor #3 poslato: Januar 14, 2019, 01:05:52 pre podne »
public OnPlayerEnterRaceCheckpoint(playerid) {
// Ako je igrac u drift modu (koji se aktivira kada kucas /drift)
if (player_drift_cp[playerid] != -1) {
// Uzimas mu koji drift cp treba da uzme
new const curr_drift_cp = player_drift_cp[playerid];

// Ako je sadasnji drift cp id veci ili jednak drift_coordinates array size (u tvom slucaju 6)
if (curr_drift_cp >= sizeof drift_coordinates) {
// Dodjeljujes mu novi index iz arraya drift_coordinates
new random_idx = random(sizeof drift_coordinates),
arr_size = sizeof drift_coordinates;

// Ovo sam uradio kako ti se ne bi jedan CP ponovio 2 puta
// Jednostavno prevedeno: dok je random_idx jednak curr_drift_cp biras novi random_idx
while(random_idx == curr_drift_cp - arr_size) random_idx = random(sizeof drift_coordinates);

// Zatim mu opet postavljas novi race checkpoint
SetPlayerRaceCheckpoint(playerid, 2, drift_coordinates[random_idx][0],  drift_coordinates[random_idx][1], drift_coordinates[random_idx][2], 0.0, 0.0, 0.0, 5.0)
player_drift_cp[playerid] = random_idx;
}
// Ako je usao u RaceCP i blizu je CPa koji treba da uzme (ovo sam uradio zbog citera koji mogu da salju sync CP)
else if (IsPlayerInRangeOfPoint(playerid, 5.0, drift_coordinates[curr_drift_cp][0],  drift_coordinates[curr_drift_cp][1],  drift_coordinates[curr_drift_cp][2])) {
// Postavljas taj tvoj CP koji hoces da pokupi
SetPlayerRaceCheckpoint(playerid, 2, TvojCP_X,  TvojCP_Y, TvojCP_Z, 0.0, 0.0, 0.0, 5.0)
// I ovde sam da ne bi imao 2 bespotrebne varijable napravio malo mozganja ali ako imas matematiku >1 skonataces
player_drift_cp[playerid] += sizeof drift_coordinates;
}
}

return 1;
}