Jump to content
  • 0

pomoc Freeze a unfreeze na cp


Artasus

Dotaz

Popis problému:

No takže som tu zase :d skúšal som asi 3 rôzne príkazy na freeze a automaticky unfreeze , no žiaden nefunguje a prejdem cez cp ako duch :d

 

Chyby/varování kompilátoru a při běhu:

--

 

Kód:

 

public OnPlayerEnterRaceCheckpoint(playerid)
{
switch(cpautobusar1[playerid])
{
case 0:
{
cpautobusar1[playerid]=1;
DisablePlayerRaceCheckpoint(playerid);
SetPlayerRaceCheckpoint(playerid,0,1249.8652,-1849.6072,13.3828,1117.2852,-1849.2708,13.3828,4.0);
TogglePlayerControllable(playerid,0);
TogglePlayerControllable(playerid,1);
}
case 1:
{
   cpautobusar1[playerid]=2;
   DisablePlayerRaceCheckpoint(playerid);
SetPlayerRaceCheckpoint(playerid,0,1117.2852,-1849.2708,13.3828,951.2630,-1774.7740,13.9896,4.0);
TogglePlayerControllable(playerid,0);
TogglePlayerControllable(playerid,1);
}
case 2:
{
   cpautobusar1[playerid]=3;
   DisablePlayerRaceCheckpoint(playerid);
   SetPlayerRaceCheckpoint(playerid,0,951.2630,-1774.7740,13.9896,756.6444,-1678.5873,3.9417,4.0);
   TogglePlayerControllable(playerid,0);
TogglePlayerControllable(playerid,1);
}
case 3:
{
   cpautobusar1[playerid]=4;
   DisablePlayerRaceCheckpoint(playerid);
   SetPlayerRaceCheckpoint(playerid,0,756.6444,-1678.5873,3.9417,807.3351,-1595.1348,13.3903,4.0);
   TogglePlayerControllable(playerid,0);
   TogglePlayerControllable(playerid,1);
}
case 4:
{
   cpautobusar1[playerid]=5;
   DisablePlayerRaceCheckpoint(playerid);
   SetPlayerRaceCheckpoint(playerid,0,807.3351,-1595.1348,13.3903,1095.0525,-1575.7653,13.3750,4.0);
   TogglePlayerControllable(playerid,0);
   TogglePlayerControllable(playerid,1);
}
case 5:
{
   cpautobusar1[playerid]=6;
   DisablePlayerRaceCheckpoint(playerid);
   SetPlayerRaceCheckpoint(playerid,0,1095.0525,-1575.7653,13.3750,1294.1293,-1651.5027,13.3828,4.0);
   TogglePlayerControllable(playerid,0);
   TogglePlayerControllable(playerid,1);
 }
case 6:
{
   cpautobusar1[playerid]=7;
   DisablePlayerRaceCheckpoint(playerid);
   SetPlayerRaceCheckpoint(playerid,0,1294.1293,-1651.5027,13.3828,1249.8883,-1849.0952,13.3828,4.0);
   TogglePlayerControllable(playerid,0);
   TogglePlayerControllable(playerid,1);
}
case 7:
{
   cpautobusar1[playerid]=8;
   DisablePlayerRaceCheckpoint(playerid);
   SetPlayerRaceCheckpoint(playerid,1,1249.8883,-1849.0952,13.3828,1249.8883,-1849.0952,13.3828,4.0);
   TogglePlayerControllable(playerid,0);
   TogglePlayerControllable(playerid,1);
}
  case 8:
  {
      cpautobusar1[playerid]=9;
      DisablePlayerRaceCheckpoint(playerid);
   SetPlayerRaceCheckpoint(playerid,1,1249.8883,-1849.0952,13.3828,1249.8883,-1849.0952,13.3828,4.0);
   TogglePlayerControllable(playerid,0);
   TogglePlayerControllable(playerid,1);
}
case 9:
{
   cpautobusar1[playerid]=10;
   DisablePlayerRaceCheckpoint(playerid);
   GivePlayerMoney(playerid,1500);
   TogglePlayerControllable(playerid,0);
   TogglePlayerControllable(playerid,1);
}
 }
return 1;

 

 

 

Dodatečné poznámky:

--

Link to comment
Share on other sites

6 odpovědí na tuto otázku

Recommended Posts

  • 0

Popis problému:

No takže som tu zase icon_e_biggrin.gif skúšal som asi 3 rôzne príkazy na freeze a automaticky unfreeze , no žiaden nefunguje a prejdem cez cp ako duch icon_e_biggrin.gif

Chyby/varování kompilátoru a při běhu:

--

 

Kód:

 

public OnPlayerEnterRaceCheckpoint(playerid)
{
switch(cpautobusar1[playerid])
{
case 0:
{
cpautobusar1[playerid]=1;
DisablePlayerRaceCheckpoint(playerid);
SetPlayerRaceCheckpoint(playerid,0,1249.8652,-1849.6072,13.3828,1117.2852,-1849.2708,13.3828,4.0);
TogglePlayerControllable(playerid,0);
TogglePlayerControllable(playerid,1);
}
case 1:
{
   cpautobusar1[playerid]=2;
   DisablePlayerRaceCheckpoint(playerid);
SetPlayerRaceCheckpoint(playerid,0,1117.2852,-1849.2708,13.3828,951.2630,-1774.7740,13.9896,4.0);
TogglePlayerControllable(playerid,0);
TogglePlayerControllable(playerid,1);
}
case 2:
{
   cpautobusar1[playerid]=3;
   DisablePlayerRaceCheckpoint(playerid);
   SetPlayerRaceCheckpoint(playerid,0,951.2630,-1774.7740,13.9896,756.6444,-1678.5873,3.9417,4.0);
   TogglePlayerControllable(playerid,0);
TogglePlayerControllable(playerid,1);
}
case 3:
{
   cpautobusar1[playerid]=4;
   DisablePlayerRaceCheckpoint(playerid);
   SetPlayerRaceCheckpoint(playerid,0,756.6444,-1678.5873,3.9417,807.3351,-1595.1348,13.3903,4.0);
   TogglePlayerControllable(playerid,0);
   TogglePlayerControllable(playerid,1);
}
case 4:
{
   cpautobusar1[playerid]=5;
   DisablePlayerRaceCheckpoint(playerid);
   SetPlayerRaceCheckpoint(playerid,0,807.3351,-1595.1348,13.3903,1095.0525,-1575.7653,13.3750,4.0);
   TogglePlayerControllable(playerid,0);
   TogglePlayerControllable(playerid,1);
}
case 5:
{
   cpautobusar1[playerid]=6;
   DisablePlayerRaceCheckpoint(playerid);
   SetPlayerRaceCheckpoint(playerid,0,1095.0525,-1575.7653,13.3750,1294.1293,-1651.5027,13.3828,4.0);
   TogglePlayerControllable(playerid,0);
   TogglePlayerControllable(playerid,1);
 }
case 6:
{
   cpautobusar1[playerid]=7;
   DisablePlayerRaceCheckpoint(playerid);
   SetPlayerRaceCheckpoint(playerid,0,1294.1293,-1651.5027,13.3828,1249.8883,-1849.0952,13.3828,4.0);
   TogglePlayerControllable(playerid,0);
   TogglePlayerControllable(playerid,1);
}
case 7:
{
   cpautobusar1[playerid]=8;
   DisablePlayerRaceCheckpoint(playerid);
   SetPlayerRaceCheckpoint(playerid,1,1249.8883,-1849.0952,13.3828,1249.8883,-1849.0952,13.3828,4.0);
   TogglePlayerControllable(playerid,0);
   TogglePlayerControllable(playerid,1);
}
  case 8:
  {
      cpautobusar1[playerid]=9;
      DisablePlayerRaceCheckpoint(playerid);
   SetPlayerRaceCheckpoint(playerid,1,1249.8883,-1849.0952,13.3828,1249.8883,-1849.0952,13.3828,4.0);
   TogglePlayerControllable(playerid,0);
   TogglePlayerControllable(playerid,1);
}
case 9:
{
   cpautobusar1[playerid]=10;
   DisablePlayerRaceCheckpoint(playerid);
   GivePlayerMoney(playerid,1500);
   TogglePlayerControllable(playerid,0);
   TogglePlayerControllable(playerid,1);
}
 }
return 1;

 

 

 

Dodatečné poznámky:

--

 

Bylo by dobré, kdyby si se navyjadřoval jako blbeček a napsal co potřebuješ. Děkuji, začíná to být lehce jdoucí na nervy.

Link to comment
Share on other sites

  • 0

Ak potrebuješ zastaviť hráča na každom checkpointe, SetVehicleVelocity to vyrieši, ako už bolo povedané vyššie.

Navyše mám pre teba pár rád, ktoré by sa ti mohli hodiť:

 

 

1.  V tvojom minulom príspevku som ti napísal, aby si case 1 prepísal na case 0 a podobne. Teraz si uvedomujem, že číslovať checkpointy od 0 nebude najlepší nápad. Ak totiž začneš číslovať od 1, budeš vedieť, že playerid pre ktoré platí cpautobusar1[playerid] == 0, nemá spustenú misiu autobusára a nebudeš si to musieť pamätať v žiadnej ďalšej premennej.

2. Môžeš odstrániť prebytočný kód - DisablePlayerCheckpoint chceš urobiť vždy, nezávisle od premennej cpautobusar1, teda to môžeš vytiahnuť pred switch.

3. Switchu sa môžeš úplne zbaviť, ak si vytvoríš konštantné pole, v ktorom budeš mať uložené súradnice checkpointov.

 

Ako to celé myslím:

new const Float:busDriverCPs[][3] = // Každý záznam má 3 elementy (x, y, z), počet záznamov je určený vymenovaním
{
    //    x         y          z
    {1249.8652, -1849.6072, 13.3828}, // 1. checkpoint
    {1117.2852, -1849-2708, 13.3828}, // 2. checkpoint
    {951.2630,  -1774.7740, 13.9896}, // 3. checkpoint
    ...
    {1249.8883, -1849.0952, 13.3828}, //posledný checkpoint
    {1249.8883, -1849.0952, 13.3828}  //posledný checkpoint znova (aby sme nemuseli v OnPlayerEnterRaceCheckpoint zvlášť ošetrovať predposledný checkpoint)
};

new cpautobusar1[MAX_PLAYERS];

public OnPlayerConnect(playerid)
{
    cpautobusar1[playerid] = 0; // Kvôli ľuďom, ktorí sa odpoja počas misie autobusára    
    return 1;
}

CMD:mise(playerid, params[]) // Mám pocit, že v jednom z tvojich príspevkov som videl ZCMD
{
    // Kontrola, či má hráč správne vozidlo / povolanie...
    cpautobusar1[playerid] = 1; // Zapneš misiu priamo tu, prípadne v OnDialogResponse, ak vyberáš trať z dialogu
    SetPlayerRaceCheckpoint(playerid, 0, busDriverCPs[0][0], busDriverCPs[0][1], busDriverCPs[0][2], busDriverCPs[1][0], busDriverCPs[1][1], busDriverCPs[1][2]);
    return 1;
}

public OnPlayerEnterRaceCheckpoint(playerid)
{
    if (cpautobusar1[playerid]) // Ak má hráč zapnutú misiu (ak cpautobusar1[playerid] nie je 0) 
    {
        // Kontroly, či je hráč v správnom vozidle, či je vôbec v nejakom vozidle atď...
        DisablePlayerCheckpoint(playerid);
        SetVehicleVelocity(GetPlayerVehicleID(playerid), 0.0, 0.0, 0.0); // Zastaví hráčove vozidlo
        if (cpautobusar1[playerid] == sizeof(busDriverCPs) - 1) // Ak hráč prišiel na posledný checkpoint.. Jediný prípad, ktorý treba riešiť zvlášť
        {
            GivePlayerMoney(playerid, 1500);
            cpautobusar1[playerid] = 0 // Vypne hráčovi misiu
        }
        else
        {
            SetPlayerRaceCheckpoint(playerid, 
                                    0, 
                                    busDriverCPs[cpautobusar1[playerid]][0], // x  
                                    busDriverCPs[cpautobusar1[playerid]][1], // y
                                    busDriverCPs[cpautobusar1[playerid]][2], // z
                                    busDriverCPs[++cpautobusar1[playerid]][0], // x next, cpautobusar1[playerid] sa zvýši o 1
                                    busDriverCPs[cpautobusar1[playerid]][1], // y next
                                    busDriverCPs[cpautobusar1[playerid]][2], // z next
                                    4.0);
        }
    }
    return 1;
}

 

 

Edited by DuFF
Link to comment
Share on other sites

  • 0

Jak bylo řečeno výše. Buď použij SetVehicleVelocity a nebo je taky možnost zastavit ho na určitou dobu a pomocí SetTimerEx ho pustit. Záleží jak to chceš.

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...