Jump to content
  • 0

pomoc Spuštění závodu všem zůčasněným


Marks

Dotaz

Dobrý večer. Včera jsem si začal psát závod. Když hráč napíše /zavod1 tak ho to hodí na start závodu. Zatím tam mám, když jsou tam 2 hráči, že se spustí závod po 30 sekundách. 
Časovač funguje skvěle. Akorát když má závod začít, ten druhý hráč, který se připojil jako poslední tak se mu neodblokuje řízení + se neukáže 1 checkpoint. Z kámošem jsme si povídali a prý že to dělá playerid, ale jak to vyřešit?  Kód, který má spustit závod vypadá takto:


if(tzavod1 == 30){
SendClientMessageToAll(0x00007777,"|Server| - {FA710C}Závod1 začíná za 30 sekund!");
}
if(tzavod1 == 10){
    SendClientMessageToAll(0x00007777,"|Server| - {FA710C}Závod1 začíná za 10 sekund!");
}
if(tzavod1 == 0){
SendClientMessage(playerid,0x00007777,"|Server| - {FA710C}Závod1 začíná!!");
SetPlayerRaceCheckpoint(playerid,0,1291.4589,-85.3801,36.3366,1478.8831,73.7265,30.0750,6);
TogglePlayerControllable(playerid,1);
chzavod1[playerid] ++;
KillTimer(CasovacZavod1);
tzavod1 = 31;
}
tzavod1 --;
tzavod1 - Je čas, který se postupně odečítá do začátku závodu
chzavod1 - Je ID checkpointů (pro přepínání dalšího)
CasovacZavod1 - Časovač, který odečítá po tiku 1čku

Problém tedy je(pro zopakování):
Když se připojí druhý hráč na závod, závod se spustí pouze tomu prvnímu, který tam již byl. Druhému hráči se nezobrazí Checkpoint + se ani nemůže hýbat (funkce TogglePlayerControllable(playerid,1);). Moje otázka zní, jak to lze udělat, aby to fungovalo, ale abych nemusel psát např:
SetPlayerRaceCheckpoint(zavod1_hrac1,....
...Checkpoint(zavod1_hrac2,.... Atp.

Možná by se hodilo ještě dodat, že tento závod by měl být až pro 4 hráče. 

Děkuji předem za odpovědi + uznání za přečtení tohoto dlouhého dotazu. Marks
:d
 
 
Link to comment
Share on other sites

10 odpovědí na tuto otázku

Recommended Posts

  • 0
CasovacZavod1 - Časovač, který odečítá po tiku 1čku

 

 

po tiku to asi jedničku odečítat nebude.. 

Nastavuješ vše jen jednomu hráčí s id playerid. Tak co víc od toho čekáš. Ulož si do proměnných id hráčů, co se připojili do závodu a pak to podle těch uložených idček nastav.

Link to comment
Share on other sites

  • 0

Když se připojí do závodu, uložíš hráčovo id do proměnné. Až se připojí požadovaný počet hráčů, tak všem těm uloženým id nastavíš potřebné věci.

GetPlayerID(..) k tomu využívat vůbec nepotřebuješ.

Link to comment
Share on other sites

  • 0

Když se připojí do závodu, uložíš hráčovo id do proměnné. Až se připojí požadovaný počet hráčů, tak všem těm uloženým id nastavíš potřebné věci.

GetPlayerID(..) k tomu využívat vůbec nepotřebuješ.

Jo, děkuji, mě nenapadlo že můžu použít promenná = playerid. A ještě bych měl další otázku, jak lze udělat abych v kódu neměl toto:

    SetPlayerRaceCheckpoint(zavod1_hrac1,0,1291.4589,-85.3801,36.3366,1478.8831,73.7265,30.0750,6);
    SetPlayerRaceCheckpoint(zavod1_hrac2,0,1291.4589,-85.3801,36.3366,1478.8831,73.7265,30.0750,6);
    SetPlayerRaceCheckpoint(zavod1_hrac3,0,1291.4589,-85.3801,36.3366,1478.8831,73.7265,30.0750,6);
    SetPlayerRaceCheckpoint(zavod1_hrac4,0,1291.4589,-85.3801,36.3366,1478.8831,73.7265,30.0750,6);

Napadl mě cyklus for.. ale nějak mi to nefunguje, nebo nevím jak mám správně napsat proměnnou.

Link to comment
Share on other sites

  • 0
new zavod1_hrac[4] = {-1,...}; // pole o 4 prvcích, které obsahují -1

někde v příkazu do tohoto pole budeš ukládat id hráčů a pak

for(new i = 0; i < 4; i++) SetPlayerRaceCheckpoint(zavod1_hrac[i] ,0, 1291.4589, -85.3801, 36.3366, 1478.8831, 73.7265, 30.0750,6);

jestli neumíš ukládat hodnoty do prvků pole..

pole[ index ] = hodnota;
Link to comment
Share on other sites

  • 0

Díky, nějak to funguje (aspoň se to ukazuje všem +  ty checkpointy) ale je tu velké ALE. Mám tam toto:
chzavod1[playerid] což je údaj o checkpointu hráče. Ale nevím teď jak vyřešit zase aby se každému podle toho, jakým projel měnily ty checkpointy. Mám tam tento kód:

if(chzavod1[playerid] == 1){
for(new i = 0; i < 4; i ++){
SetPlayerRaceCheckpoint(zavod1_hrac,0,1478.8831,73.7265,30.0750,1400.2654,202.5548,19.2504,6);
}
Myslím si, že tam bude něco podobného, ale nemůžu přijít jak.
Link to comment
Share on other sites

  • 0

 

if(chzavod1[playerid] == 1)
{
SetPlayerRaceCheckpoint(playerid,0,1478.8831,73.7265,30.0750,1400.2654,202.5548,19.2504,6);
}

 

Zde už má být pouze playerid bez toho foru? Jestli jo, tak to nechápu :d

Link to comment
Share on other sites

  • 0

Proč bys když hráč projede checkpointem nastavoval všem hráčům další checkpoint?

Po předělání je to snad ještě horší... :d uplně stejný jako na začátku, akorát se všem zobrazily checkpointy. Ale když jsem vjel do checkpointu, tak to nefunguje... Asi by to chtělo nějak ošetřit nějakými podmínkami.

EDIT:

Kámoš mi poradil, ať to udělám přes switch. Switch mi fungoval lépe, akorát to musím ještě otestovat.

Edited by Marks
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...