Jump to content
  • 0

pomoc [HELP] Spawnutí


Andreyyy

Dotaz

7 odpovědí na tuto otázku

Recommended Posts

  • 0

Vytvor si premennú. Potom stock, napr. IsCellOccupied a zisti cez neho, či je cela obsadená pomocou tej premennej. Samozrejme, keď sa do nej niekto spawne, zmeníš hodnotu premennej na true.

 

Potom už len dáš do spawnu if(!IsCellOccupied) //kod a hotovo.

Link to comment
Share on other sites

  • 0
// na vrch
new bool:Cela[3]; // 3 si zmeň na počet ciel, ktoré máš v móde

// OnGameModeInit
Cela[0] = false; // Aby server vedel, že cely nie sú obsadené
Cela[1] = false;
Cela[2] = false;
// Ak ich máš viac tak pokračuješ, tu pracujeme len s troma

// do Spawnu
if(Cela[0] == false)
{
     // Tu spawneš hráča do cely
}
else if(Cela[1] == false)
{
     // Tu spawneš hráča do cely
}

// atď.

Dá sa to urobiť jednoduchšie pomocou switch alebo stocku, ale na ntb nemám Pawno a toto som vymyslel len tak z hlavy.

Link to comment
Share on other sites

  • 0

 

 

// na vrch
new bool:Cela[3]; // 3 si zmeň na počet ciel, ktoré máš v móde

// OnGameModeInit
Cela[0] = false; // Aby server vedel, že cely nie sú obsadené
Cela[1] = false;
Cela[2] = false;
// Ak ich máš viac tak pokračuješ, tu pracujeme len s troma

// do Spawnu
if(Cela[0] == false)
{
     // Tu spawneš hráča do cely
}
else if(Cela[1] == false)
{
     // Tu spawneš hráča do cely
}

// atď.

 

Dá sa to urobiť jednoduchšie pomocou switch alebo stocku, ale na ntb nemám Pawno a toto som vymyslel len tak z hlavy.

 

Dobrý pokus. Ale ne :)... co když bude mít těch cel třeba 10?. Nebo ještě víc. To mu i klidně 100 řádků zaberou jen podmínky.

 

Jinak, ke kontrole, pokud je už v cele, nemusíš využívat boolen. Napadlo mě zajímavější řešení. Stačí využít jen cyklus :):

 

 

new
	Cela[10] = 0;

public OnPlayerSpawn(playerid)
{
	for(new i; i<10; Cela[i]++)
	{
	    if(Cela[i] == 0)
	    {
			//Pokud cela nebude zabraná, spawne se v ní.
			Cela[i] = 1;
			SetPlayerPos(playerid .... );
			break;
		}else{
			//Pokud je zabraná, tak hledá dál..
		    continue;
		}
	}
	return 1;
}

 

 

Trošku jsem to testla, a něco málo jde, ale pro jistotu to zkus :).

Link to comment
Share on other sites

  • 0
  • Hlavní moderátor

Karolínka:

new
	Cela[10] = 0;

useless, počáteční hodnota všech proměnných a polí je vždy 0, navíc takhle se rozhodně pole neinicializuje

for(new i; i<10; Cela[i]++)

celkem by mě zajímalo to tvé testování, právě jsi vytvořila nekonečný cyklus, poněvadž nezvětšuješ proměnnou i, ale hodnotu Cela[0]

 

Dobrý pokus, ale ne :)...

 

ať už tedy nepíši naprázdno:

- vytvoř si dvojrozměrné pole, do kterého uložíš pozice X, Y a Z pro port do určité cely, těch cel bys měl mít asi tolik, kolik je maximální definovaný počet hráčů (to dá rozum, aby měl každý svou celu), poté jednoduše použij hráčovo ID, které je vždy jedinečné: (kdyby chtěl někdo namítat, že mi chybí kontrola, zda je cela obsazená, ať si přečte tučně zvýrazněná slova)

new const Float:celyPoz[MAX_PLAYERS][3] =
{
    {0.0,1.1,2.2}, //pozice pro port do 1. cely
    {0.0,1.1,2.2}, //                   2. cely
    {0.0,1.1,2.2}, //                   3. cely
    //atd., bude nutné naplnit všechny pozice
};

a do OnPlayerSpawn:

SetPlayerPos(playerid,celyPoz[playerid][0],celyPoz[playerid][1],celyPoz[playerid][2]);

je to jedno z možných řešení, podle počtu hráčů na serveru si MAX_PLAYERS přizpůsob podle svého, defaultně je to 500, což je do začátku zbytečné, navíc naplňování pole 500 pozicemi cel by bylo dost otravné

Link to comment
Share on other sites

  • 0

SetPlayerPos(playerid,celyPoz[playerid][0],celyPoz[playerid][1],celyPoz[playerid][2]);

Tohle trochu nechápu... To "celyPoz" Tam mám dát souřadnice kde se spawne nebo jak? a Když mám 20 cel tak mám dát od 0 do 19 nebo 0 do 20? 

Link to comment
Share on other sites

  • 0

Přesně tak. Souřadnice jednotlivých cel.

new const Float:celyPoz[MAX_PLAYERS][3] =
{
{x1,y1,z1}, // pro ID 0 se přiřadí tato cela
{x2,y2,z2}, // pro ID 1 se přiřadí tato cela
{x3,y3,z3}, // pro ID 2 se přiřadí tato cela
};
Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...