Szerző Téma: hp le!  (Megtekintve 979 alkalommal)

hp le!
« Dátum: 2013. Augusztus 05. - 19:28:20 »
0 Show voters
egy olyan code-t kérnék vagy szeretnék aminek az a lényege,hogy ha a playernak lemegy egyszerre 10 hpja akkor folyamatosan mennyen le amíg nem írja be azt a parancsot hogy /ellátás.
Válaszokat elõre is köszönöm!
((nem scriptkéréshez nyittottam mert nem script,hanem code,és nem rpg kéréshez nyitottam mert ez nem csak rpg.re mehet))!

hp le!
« Válasz #1 Dátum: 2013. Augusztus 05. - 20:27:28 »
0 Show voters
Sscanf2 szükséges hozzá:
 
SetTimer(\"HPle\", 1000, true);   //1 másodpercenként fog lefutni a timer GameModeInit alá
new HPTIMER_PLR[MAX_PLAYERS];
forward HPle(playerid);
public OnPlayerGiveDamage(playerid, damagedid, Float: amount, weaponid)
{
new Float:HP[MAX_PLAYERS];
GetPlayerHealth(damagedid, HP[damagedid]);
if(HP[damagedid] <= 90)
{
HPTIMER_PLR[playerid] = 1;
}
return 1;
}
public HPle(playerid)
{
new Float:HP[MAX_PLAYERS];
if(HPTIMER_PLR[playerid] == 1)
{
GetPlayerHealth(HPTIMER_PLR[playerid], HP[playerid]);
SetPlayerHealth(HPTIMER_PLR[playerid], HP[playerid]-1);
}
return 1;
}
CMD:ellatas(playerid, params[])
{
HPTIMER_PLR[playerid] = 0;
return 1;
}

hp le!
« Válasz #2 Dátum: 2013. Augusztus 05. - 21:26:18 »
0 Show voters
Nagyon szépen köszönöm!
Te haladó scripter vagy?:D

hp le!
« Válasz #3 Dátum: 2013. Augusztus 05. - 21:39:57 »
0 Show voters
Idézetet írta: anorennia date=1375727248\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"40969\" data-ipsquote-contentclass=\"forums_Topic
Sscanf2 szükséges hozzá:
 
SetTimer(\"HPle\", 1000, true);   //1 másodpercenként fog lefutni a timer GameModeInit alá
new HPTIMER_PLR[MAX_PLAYERS];
forward HPle(playerid);
public OnPlayerGiveDamage(playerid, damagedid, Float: amount, weaponid)
{
new Float:HP[MAX_PLAYERS];
GetPlayerHealth(damagedid, HP[damagedid]);
if(HP[damagedid] <= 90)
{
HPTIMER_PLR[playerid] = 1;
}
return 1;
}
public HPle(playerid)
{
new Float:HP[MAX_PLAYERS];
if(HPTIMER_PLR[playerid] == 1)
{
GetPlayerHealth(HPTIMER_PLR[playerid], HP[playerid]);
SetPlayerHealth(HPTIMER_PLR[playerid], HP[playerid]-1);
}
return 1;
}
CMD:ellatas(playerid, params[])
{
HPTIMER_PLR[playerid] = 0;
return 1;
}

 

Ez minek MAX_PLAYERS, mindkét helyen?
 
new Float:HP[MAX_PLAYERS];

Nem elérhető Rexii

  • 471
    • Profil megtekintése
hp le!
« Válasz #4 Dátum: 2013. Augusztus 05. - 22:55:54 »
0 Show voters
Idézetet írta: ɐʞzssǝlosz date=1375731597\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"40969\" data-ipsquote-contentclass=\"forums_Topic


Sscanf2 szükséges hozzá:
 
SetTimer(\"HPle\", 1000, true);   //1 másodpercenként fog lefutni a timer GameModeInit alá
new HPTIMER_PLR[MAX_PLAYERS];
forward HPle(playerid);
public OnPlayerGiveDamage(playerid, damagedid, Float: amount, weaponid)
{
new Float:HP[MAX_PLAYERS];
GetPlayerHealth(damagedid, HP[damagedid]);
if(HP[damagedid] <= 90)
{
HPTIMER_PLR[playerid] = 1;
}
return 1;
}
public HPle(playerid)
{
new Float:HP[MAX_PLAYERS];
if(HPTIMER_PLR[playerid] == 1)
{
GetPlayerHealth(HPTIMER_PLR[playerid], HP[playerid]);
SetPlayerHealth(HPTIMER_PLR[playerid], HP[playerid]-1);
}
return 1;
}
CMD:ellatas(playerid, params[])
{
HPTIMER_PLR[playerid] = 0;
return 1;
}

 

Ez minek MAX_PLAYERS, mindkét helyen?
 
new Float:HP[MAX_PLAYERS];

 

[/quote]
\"public HPle(playerid)\"
alatt nem kell az szerintem.

hp le!
« Válasz #5 Dátum: 2013. Augusztus 05. - 23:06:53 »
0 Show voters
nem jó!:S

hp le!
« Válasz #6 Dátum: 2013. Augusztus 06. - 01:17:59 »
0 Show voters
kezdõnek mondanám magam inkább.. :/
Azért volt ott, hogy valaki belekössön...
rájöttem hogy miért nem jó ha minden igaz:
 
SetTimer(\"HPle\", 1000, true);   //1 másodpercenként fog lefutni a timer GameModeInit alá
new HPTIMER_PLR[MAX_PLAYERS];
forward HPle();
public OnPlayerGiveDamage(playerid, damagedid, Float: amount, weaponid)
{
        new Float:HP[MAX_PLAYERS];
        GetPlayerHealth(damagedid, HP[damagedid]);
        if(HP <= 90)
        {
                HPTIMER_PLR[damagedid] = 1;
        }
        return 1;
}
public HPle()
{
        new Float:HP[MAX_PLAYERS];
        for(new i = 0; i < MAX_PLAYERS;i++)
        {
        if(HPTIMER_PLR == 1)
        {
                GetPlayerHealth(HPTIMER_PLR, HP);
                SetPlayerHealth(HPTIMER_PLR, HP-1);
        }
        }
        return 1;
}
CMD:ellatas(playerid, params[])
{
        HPTIMER_PLR[playerid] = 0;
        return 1;
}

 
KÖZBEN ÚJÍTOTTAM
« Utoljára szerkesztve: 2013. Augusztus 06. - 01:32:05 írta anorennia »

hp le!
« Válasz #7 Dátum: 2013. Augusztus 06. - 03:17:19 »
0 Show voters
Idézetet írta: anorennia date=1375744679\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"40969\" data-ipsquote-contentclass=\"forums_Topic
kezdõnek mondanám magam inkább.. :/
Azért volt ott, hogy valaki belekössön...
rájöttem hogy miért nem jó ha minden igaz:
 
SetTimer(\"HPle\", 1000, true);   //1 másodpercenként fog lefutni a timer GameModeInit alá
new HPTIMER_PLR[MAX_PLAYERS];
forward HPle();
public OnPlayerGiveDamage(playerid, damagedid, Float: amount, weaponid)
{
        new Float:HP[MAX_PLAYERS];
        GetPlayerHealth(damagedid, HP[damagedid]);
        if(HP <= 90)
        {
                HPTIMER_PLR[damagedid] = 1;
        }
        return 1;
}
public HPle()
{
        new Float:HP[MAX_PLAYERS];
        for(new i = 0; i < MAX_PLAYERS;i++)
        {
        if(HPTIMER_PLR == 1)
        {
                GetPlayerHealth(HPTIMER_PLR, HP);
                SetPlayerHealth(HPTIMER_PLR, HP-1);
        }
        }
        return 1;
}
CMD:ellatas(playerid, params[])
{
        HPTIMER_PLR[playerid] = 0;
        return 1;
}

 
KÖZBEN ÚJÍTOTTAM
 
Jajj.
De alakul alakul, csak még nem nagyon tudod mi minek van.  >:D
 
   SetTimer(\"HPle\", 1000, true);   //1 másodpercenként fog lefutni a timer OnGameModeInit alá
new bool:HPTIMER_PLR[MAX_PLAYERS];
forward HPle();
public
OnPlayerGiveDamage(playerid, damagedid, Float: amount, weaponid)
{
new
   Float:HP;
GetPlayerHealth(damagedid, HP);
if(HP <= 90) /*if(floatcmp(90, HP) == 1)*/ { HPTIMER_PLR[damagedid] = true; }
return 1;
}
     
public
HPle()
{
new
   Float:HP;
for(new i = 0; i < MAX_PLAYERS;i++)
{
   if(IsPlayerConnected(i))
   {
      if(HPTIMER_PLR)
      {
         GetPlayerHealth(i, HP);  // floatsub(HP, -1.0); SetPlayerHealth(i, HP);
         SetPlayerHealth(i, HP - 1);
      }
   }
}
return 1;
}
     
CMD:ellatas(playerid, params[])
{
HPTIMER_PLR[playerid] = false;
return 1;
}

 
Persze nincs tesztelve, és lehetséges hogy a lebegõpontos értékek csökkentésénél és ellenõrzésénél floatsub illetve floatcmp használata szükséges.

Nem elérhető Xeon

hp le!
« Válasz #8 Dátum: 2013. Augusztus 06. - 11:11:44 »
0 Show voters
Elnézést, hogy beleszólok, de ez így nem csak akkor fog mûködni, ha egyik játékos sebzi meg a másikat? Tehát ha leesik stb., akkor nem lesz jó.

hp le!
« Válasz #9 Dátum: 2013. Augusztus 06. - 11:46:45 »
0 Show voters
hát így is jó!de úgy még jobb lenne ha le esik vagy stb. és akkor is lemenne a hp-ja

hp le!
« Válasz #10 Dátum: 2013. Augusztus 06. - 14:34:46 »
0 Show voters
Idézetet írta: Xeon date=1375780304\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"40969\" data-ipsquote-contentclass=\"forums_Topic
Elnézést, hogy beleszólok, de ez így nem csak akkor fog mûködni, ha egyik játékos sebzi meg a másikat? Tehát ha leesik stb., akkor nem lesz jó.
 
Hát teszteld le, nekem ezekre nincs már idõm hogy kiderítsem mely esetekben kerül meghívásra melyekben nem, mert hát ez a samp programozójának a ****ja hogy ezer visszahívás kell olyasvalaminek ami egy visszahívásban is elférne.
Ha nem mûködik akkor meg kell próbálni átírni ide:
http://wiki.sa-mp.com/wiki/OnPlayerTakeDamage
valamelyik visszahívás csak beválik. :D

hp le!
« Válasz #11 Dátum: 2013. Augusztus 06. - 15:22:43 »
0 Show voters
Háát igen én is gondolkoztam, hogy menni fog e leesés stb nél mert nem teszteltem ^^
Szóval akkor:
 

    SetTimer(\"HPle\", 1000, true);   //1 másodpercenként fog lefutni a timer GameModeInit alá
    new HPTIMER_PLR[MAX_PLAYERS];
    forward HPle();
    public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid)
    {
            new Float:HP[MAX_PLAYERS];
            GetPlayerHealth(playerid, HP[playerid]);
            if(HP[playerid] <= 90.0)
            {
                print(\"sebzést kapott\");
                    HPTIMER_PLR[playerid] = 1;
                print(\"változó = 1\");
            }
            return 1;
    }
    public HPle()
    {
        print(\"lefutott\");
            new Float:HP[MAX_PLAYERS];
            for(new i = 0; i < 10;i++)
            {
                print(\"ciklus elindult\");
                    if(HPTIMER_PLR == 1)
                    {
                        print(\"belépett a nullás idbe\");
                            GetPlayerHealth(i, HP);
                            SetPlayerHealth(i, HP-1);
                        print(\"megváltoztatta a hp-t\");
                    }
            }
            return 1;
    }
    CMD:ellatas(playerid, params[])
    {
            HPTIMER_PLR[playerid] = 0;
            return 1;
    }

 
TESZTELTEM, hibátlan :)
Zsoleszka egyébként nem kötekedés képp. de semmi szükség nem volt arra amit írtál :)
« Utoljára szerkesztve: 2013. Augusztus 06. - 15:48:46 írta anorennia »

hp le!
« Válasz #12 Dátum: 2013. Augusztus 06. - 15:44:55 »
0 Show voters
@anorennia
Miért nem nézed meg azt a kódot amit írtam?
A HPTIMER_PLR[playerid] -el jelölt cella értékét egyre állítod majd ezt használod fel a lekérésénél:
GetPlayerHealth(HPTIMER_PLR szerinted mûködni fog?

Meg minek az 500 darab változó egy funkción belül mikor egyenként végig megy a játékosokon a for ciklus (new Float:HP[MAX_PLAYERS];) ?


Ui.:


Na jó nem idegesítem magam, ez volt az utolsó hozzászólásom ebben a témában.

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal