-
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))!
-
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;
}
-
Nagyon szépen köszönöm!
Te haladó scripter vagy?:D
-
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];
-
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.
-
nem jó!:S
-
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
-
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.
-
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 így is jó!de úgy még jobb lenne ha le esik vagy stb. és akkor is lemenne a hp-ja
-
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
-
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 :)
-
@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.