Rand coord po 100ti put


Započeo Nure, Januar 13, 2019, 02:09:30 PRE PODNE

prethodna tema - sledeća tema

0 članova i 1 gost pregledaju ovu temu.

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

// 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;
}

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.

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;
}