Jump to content
  • 0

pomoc Hasic ohen


KuraMa

Dotaz

Mám ďalší problém,je to v tom že si idem spraviť hasiča,lenže neviem ako mám spraviť toto:

Že keď začne misiu a vstupi do CP dám tam CreateExplosion a bude tam ohen lenze ako spravim ze ked uhasi ten ohen tak mu to da money a ukaze dalsi CP ?

Ďakujem za odpovede.

Link to comment
Share on other sites

7 odpovědí na tuto otázku

Recommended Posts

  • 0

Vytvářej oheň přes objekty, ne přes exploze. Nastav těm objektům "HP" a pak testuj jestli hráč je ve vozidle, nebo drží hasičák, jestli kouká na ten objekt, jestli je v dostatečné vzdálenosti. jestli "střílí". Pokud vše splňuje tak odebírej danému obejktu "HP", až bude "HP" nulové, tak objekt odeber a dej mu odměnu a zobraz další CP.

 

Ohně přes CreateExplosion jsou client side a vytvoří se jen hráčům, kterým se ta exploze streamuje.

Link to comment
Share on other sites

  • 0

Takhle nějak to bude vypadat

 

 

// deklarace proměnných


new hpOhen[POCET_OBJEKTU]; // pole pro "hp" ohně
new idOhen[POCET_OBJEKTU]; // pole pro id objektu ohně


// vytváření ohně
idOhen[0] = CreateObject(....); // objekty s modelem ohně
idOhen[1] = CreateObject(....);

hpOhen[0] = 100; // nastavení života na 100, při větším množství použij cyklus
hpOhen[1] = 100;

// zapnutí možnosti uhašení ohně:
EnablePlayerCameraTarget(playerid, true);

// vypnutí (po dokončení mise atd)
EnablePlayerCameraTarget(playerid, false);


// někde v publicu, kde to budeš kontrolovat (nedoporučuji OnPlayerUpdate)
// pozn. Odstranění jednoho ohně neznamená, že uhasil všechny!
if( sedí v hasičáku, nebo má hasičák, střílí z nich, má aktivovanou misi a bůh ví co )
{
    new Float:pos[3];
    new obj = GetPlayerCameraTargetObject(playerid);
    GetObjectPos(obj, pos[0], pos[1], pos[3]);
    if(obj != INVALID_OBJECT_ID && IsPlayerInRangeOfPoint(playerid, rozsah, pos[0], pos[1], pos[2]))
    {
        for(new i = 0; i < POCET_OBJEKTU; i++)
        {
            if(obj == idOhen[i])
            {
                hpOhen[i]--; // odebereme život
                if(hpOhen[i] <= 0) // pokud životy došly odstraníme oheň a dáme odměnu
                {
                    DestroyObject(obj);
                    Odměna, další cp atd
                    break;
                }
            }
        }
    }
}

// EDIT: napadá mě, že funkce GetPlayerCameraTargetObject nemusí fungovat na objekty bez kolize (takže i objekt ohně). Jestli je tomu tak, tak to obejdi vytvořením nějakého neviditelného objektu a kontroly  jestli míří na něj. 

Edited by Lukasz
Link to comment
Share on other sites

  • 0

Lukasz a ešte niečo robil som si arenu kde sa majú spawnovat každú minuty pickupy na randomnych poziciach lenže pickupy sa mi spawnu ale ked zoberiem HP pickup tak mi to da vestu a nie HP.

Tu je kód:

 

 

//tu spustam ten timer 
ocmd:arena(playerid,params[])
{
   if(jevarene[playerid] == 1)return SendClientMessage(playerid,0xFFAAFF,"Už si v arene,pre odchod použi /exit");
   GetPlayerPos(playerid,X,Y,Z);
   SetTimerEx("pickupy",60000,false,"i",playerid);
   jevarene[playerid] = 1;
   GameTextForPlayer(playerid,"~r~Bol si pripojeny ~b~ do areny pre ~w~ odchod pouzi /exit",5000,5);
   SetPlayerPos(playerid,40.7208,1531.5510,12.7500);
   SetPlayerVirtualWorld(playerid,1);
   return 1;
}
 
//public timeru
public pickupy(playerid)
{
   new pickups = random(6);
   switch (pickups)
   {
  case 0:hppickup1[playerid] = CreatePickup(1240,1,36.5012,1558.5099,13.8007,1);
  case 1:hppickup2[playerid] = CreatePickup(1240,1,14.9635,1521.3167,14.9781,1);
  case 2:hppickup3[playerid] = CreatePickup(1240,1,15.5463,1485.9327,12.7500,1);
  case 3:vestapickup1[playerid] = CreatePickup(1242,1,-27.2449,1486.5269,13.2496,1);
  case 4:vestapickup2[playerid] = CreatePickup(1242,1,-58.7937,1507.3346,12.7500,1);
  case 5:vestapickup3[playerid] = CreatePickup(1242,1,-12.7272,1525.0887,12.7500,1);
   }
   return 1;
}
 
//onplayerpickuppickup
public OnPlayerPickUpPickup(playerid, pickupid)
{
if(pickupid == hppickup1[playerid])
{
SetPlayerHealth(playerid,100);
DestroyPickup(hppickup1[playerid]);
SetTimerEx("pickupy",60000,false,"i",playerid);
}
if(pickupid == hppickup2[playerid])
{
        SetPlayerHealth(playerid,100);
DestroyPickup(hppickup2[playerid]);
SetTimerEx("pickupy",60000,false,"i",playerid);
}
if(pickupid == hppickup3[playerid])
{
        SetPlayerHealth(playerid,100);
        DestroyPickup(hppickup3[playerid]);
SetTimerEx("pickupy",60000,false,"i",playerid);
}
if(pickupid == vestapickup1[playerid])
{
SetPlayerArmour(playerid,100);
DestroyPickup(vestapickup1[playerid]);
SetTimerEx("pickupy",60000,false,"i",playerid);
}
if(pickupid == vestapickup2[playerid])
{
SetPlayerArmour(playerid,100);
DestroyPickup(vestapickup2[playerid]);
SetTimerEx("pickupy",60000,false,"i",playerid);
}
if(pickupid == vestapickup3[playerid])
{
SetPlayerArmour(playerid,100);
DestroyPickup(vestapickup3[playerid]);
SetTimerEx("pickupy",60000,false,"i",playerid);
}
return 1;
} 

Díky za odpovede.
Edited by KuraMa
Link to comment
Share on other sites

  • 0

Říká se tomu prohazování pickupů :( a je to zákeřné :(

 

Na místo kde máš deklarována pole:

new hppickup1[MAX_PLAYERS] = {-1,...}; // prostě jen přidáš  = {-1,...}; k původním deklaracím
new hppickup2[MAX_PLAYERS] = {-1,...};
new hppickup3[MAX_PLAYERS] = {-1,...};
new vestapickup1[MAX_PLAYERS] = {-1,...};
new vestapickup1[MAX_PLAYERS] = {-1,...};
new vestapickup1[MAX_PLAYERS] = {-1,...};

OnPlayerPickUpPickup

public OnPlayerPickUpPickup(playerid, pickupid)
{
    if(pickupid == hppickup1[playerid])
    {
        SetPlayerHealth(playerid,100);
        DestroyPickup(hppickup1[playerid]);
        hppickup1[playerid] = -1;
        SetTimerEx("pickupy",60000,false,"i",playerid);
        return 1;
    }
    if(pickupid == hppickup2[playerid])
    {
        SetPlayerHealth(playerid,100);
        DestroyPickup(hppickup2[playerid]);
        hppickup2[playerid] = -1;
        SetTimerEx("pickupy",60000,false,"i",playerid);
        return 1;
    }
    if(pickupid == hppickup3[playerid])
    {
        SetPlayerHealth(playerid,100);
        DestroyPickup(hppickup3[playerid]);
        hppickup3[playerid] = -1;
        SetTimerEx("pickupy",60000,false,"i",playerid);
        return 1;
    }
    if(pickupid == vestapickup1[playerid])
    {
        SetPlayerArmour(playerid,100);
        DestroyPickup(vestapickup1[playerid]);
        vestapickup1[playerid] = -1;
        SetTimerEx("pickupy",60000,false,"i",playerid);
        return 1;
    }
    if(pickupid == vestapickup2[playerid])
    {
        SetPlayerArmour(playerid,100);
        DestroyPickup(vestapickup2[playerid]);
        vestapickup2[playerid] = -1;
        SetTimerEx("pickupy",60000,false,"i",playerid);
        return 1;
    }
    if(pickupid == vestapickup3[playerid])
    {
        SetPlayerArmour(playerid,100);
        DestroyPickup(vestapickup3[playerid]);
        vestapickup3[playerid] = -1;
        SetTimerEx("pickupy",60000,false,"i",playerid);
        return 1;
    }
    return 1;
}

Při DestroyPickup "vyresetuj" proměnnou ve které máš uložené id (promennaIdPickupu = -1).

Přehlednější a hezčí verzi kódu ti sem psát nebudu.

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