-
Üdv!
Bocs ,hogy mostanában enyit kérdezek, ez az utolsó kérdésem.
Csinálom az NPC-m legfejlettebb változatát, és új sebzés rendszert vezetnék be.
Az a gondom ,hogy megtudnám oldani ,hogy mindig lekérni a fegyvert és aszerint sebezni, de nem akarom mind a 43 fegvyernél lekérni, és if elágazást alkalmazni. Ennél van rövidebb megoldás és azt szeretném kérdezni tõletek, hogy azt ,hogy lehetne? Úgyértve ha van egy érték(fegyverID) pl a 31 és ahoz csak egy másik érték pl a 5.5 (sebzés) csatlakozhat? Így lehet megoldani a problémám?
-
Hát én úgy oldanám meg, hogy létrehoznék egy a fegyver ID-k számával megegyezõ méretû vektort, és annak az elemeire hivatkoznék. Tehát:
[pawn]
new const Float: fDamages[ 43 ] = {
2.0, //ID 1
3.0, //ID 2
5.0, //ID 3
13.5 //ID 4
};
//Valahol hivatkozol rá.
//Pl most ezzel a \'fDmg\' változóba eltárolod a sebzés mértékét
new Float: fDmg = fDamages[ GetPlayerWeapon( playerid ) - 1 ]; //A -1 azért kell, mivel a tömbök értékei 0-tól, míg a fegyverek azonosítói 1-tõl kezdõdnek, így a kívánt eredményt kapjuk
[/pawn]
-
Köszönöm ZeRo, te mindig tudsz segíteni! :D
Ezeket a vektorokat most fogom elsõnek alkalmazni és egy kicsit nem értem.
Ha például azt akarom ,hogy ha M4 van a játékosnál akkor (fegyverID 31) azt hogy olgyam meg ,hogy 5.5 -t sebezzen? vagyis anyi legyen a másik érték? Tudom leírtad, de hogy írjam a fügvényhez oda a vektort?
-
Hát ha a vektor deklarációjánál végigírod a neked tetszõ sebzéseket, akkor csak egyszerûen az M4( id 31 ) cellájára hivatkozol. Pl életvesztéssel:
[pawn]
//Tegyük fel, hogy a vektor már deklarálva van
new fHealth;
GetPlayerHealth( playerid, fHealth );
SetPlayerHealth( playerid, fHealth - fDamages[ 31 - 1 ] ); //A jelenlegi életébõl levonjuk a 31es cella( M4 ) értékét
[/pawn]
És ez általánosítva( tehát nem kell a cella értékeit figyelned, mert magától társítja, ha a fenti vektornak végigírtad az értékeit ):
[pawn]
new fHealth;
GetPlayerHealth( playerid, fHealth );
SetPlayerHealth( playerid, fHealth - fDamages[ GetPlayerWeapon( playerid ) - 1 ] ); //A jelenlegi életébõl levonjuk a játékos fegyverének IDjéhez társított értéket
[/pawn]
Ha még mindig nem világos, kérdezhetsz nyugodtan. ;)
-
Már világos, kösz ZeRo!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Akkor nekem a másodikra lesz szügségem ugye? ahoz ,hogy a fegyverhez való értéket vonja le ,nem a 31 es értéket hanem amit hozzá társítunk pl az 5.5 öt ugye?
Kifagy tõle a Pawno :(
A kifagyást megoldottam, csak anyi ,hogy
new const Float: fDamages[ 43 ] = {
2.0, //ID 1
3.0, //ID 2
5.0, //ID 3
13.5 //ID 4
};
a 2.0 itt például a id 1 sebzése?
-
;D
Pont erre akart rávilágítani.
Csak pont rosszul példázta.
new const Float: fDamages[ 43 ] = {
2.0, //ID 1
3.0, //ID 2
5.0, //ID 3
13.5 //ID 4
};
mivel a tömbök értékei 0-tól, míg a fegyverek azonosítói 1-tõl kezdõdnek,
Tehát nullától kezdõdnek.
new Float: fDamages[] =
{
2.0, // ID 0
3.0, // ID 1
5.0, // ID 2
13.5 // ID 3
};
A 2.0 nullás sebzési értéket úgy kapod meg ha az fDamages változó 0 jelölésû cellájára hivatkozol.
printf(\"Érték: %f\", fDamages[0]); // Érték: 2.000000
printf(\"Érték: %f\", fDamages[3]); // Érték: 13.50000
-
Jah, ha 0-ra hivatkozok akkoe 2.0, ha pl 1 re hivatkozok akkor 3.0?
GameStar is mutatott egy megoldást, meik a jobb, Zero-é vagy övé?
new Float:fegyveradatok[][]={
{31.0,5.5}
};
Fegyverid: floatround(fegyveradatok[0][0]), Sebzés: fegyveradatok[0][1]
-
\" post=\"139946\" timestamp=\"1306089521\"]
Jah, ha 0-ra hivatkozok akkoe 2.0, ha pl 1 re hivatkozok akkor 3.0?
GameStar is mutatott egy megoldást, meik a jobb, Zero-é vagy övé?
new Float:fegyveradatok[][]={
{31.0,5.5}
};
Fegyverid: floatround(fegyveradatok[0][0]), Sebzés: fegyveradatok[0][1]
[/quote]
[/quote]
Így van.
Kérdés hogy gamestar esetében mi végett van létrehozva a 31.0 mert ha fegyver ID-nek, akkor ZeRo példája jobb.
-
new fHealth; (nem Float: -ba kellene?)
Zombie[playerid][Health] = fHealth;
Zombie[playerid][Health] = fHealth - fDamages[1 - 1];
Akkor ,hogy a fDamages elsõ értékét 1 -re írtam így ekkor sebezni fog 3.0-t ugye?
(A Zombie[playerid][Health] egy enumerált változó, ez tárolja az életét.)[/code]
-
;D
Pont erre akart rávilágítani.
Csak pont rosszul példázta.
new const Float: fDamages[ 43 ] = {
2.0, //ID 1
3.0, //ID 2
5.0, //ID 3
13.5 //ID 4
};
mivel a tömbök értékei 0-tól, míg a fegyverek azonosítói 1-tõl kezdõdnek,
Tehát nullától kezdõdnek.
new Float: fDamages[] =
{
2.0, // ID 0
3.0, // ID 1
5.0, // ID 2
13.5 // ID 3
};
A 2.0 nullás sebzési értéket úgy kapod meg ha az fDamages változó 0 jelölésû cellájára hivatkozol.
printf(\"Érték: %f\", fDamages[0]); // Érték: 2.000000
printf(\"Érték: %f\", fDamages[3]); // Érték: 13.50000
[/quote]
Nem, erre direkt figyeltem. Tegyük fel, hogy az 1-es ID-jû fegyver sebzése 2.0. A tömbben ez ugye az elsõ, tehát az ott elfoglalt helye 0( mint azt mindketten említettük ). Ezért, amikor hivatkozok a vektor cellájára, levonok egyet az értékbõl. Így ha a GetPlayerWeapon függvény az 1 értékkel tér vissza, akkor ahhoz a 0-s cellát fogja társítani, azaz a 2.0-s értékût, tehát helyes a megoldásom.
-
\" post=\"139957\" timestamp=\"1306090355\"]
new fHealth; (nem Float: -ba kellene?)
Zombie[playerid][Health] = fHealth;
Zombie[playerid][Health] = fHealth - fDamages[1 - 1];
Akkor ,hogy a fDamages elsõ értékét 1 -re írtam így ekkor sebezni fog 2.0-t ugye?
(A Zombie[playerid][Health] egy enumerált változó, ez tárolja az életét.)
[/quote]
De ez akkor így jó? Amúgy kösz ,hogy enyit segítetek :)
-
\" post=\"139959\" timestamp=\"1306090502\"]
link=topic=12231.msg139957#msg139957 date=1306090355]
new fHealth; (nem Float: -ba kellene?)
Zombie[playerid][Health] = fHealth;
Zombie[playerid][Health] = fHealth - fDamages[1 - 1];
Akkor ,hogy a fDamages elsõ értékét 1 -re írtam így ekkor sebezni fog 2.0-t ugye?
(A Zombie[playerid][Health] egy enumerált változó, ez tárolja az életét.)
[/quote]
De ez akkor így jó? Amúgy kösz ,hogy enyit segítetek :)
[/quote]
De igen, a Float elõtag lemaradt, elnézést.
Egyébként ez most itt nem világos amit írtál. Kétszer állítod a megadott változó értékét; az elsõvel nem le akarod kérni az fHealth változóba?
[pawn]
new Float: fHealth;
fHealth = Zombie[playerid][Health];
[/pawn]
A következõ sor nem világos, el tudnád magyarázni mégegyszer?
-
A legelsõ sort amikor egyenlõvéteszem a változót az fHealth-al azt lekérdezésnek szántam.
-
Ez most nem épp ehhez kapcsolódik, de megkérdem:
Elég sok helyen new const-ot használnak azoknak a tömböknek, amiknek az értékük fix. Mivel ez jóval gyorsabb.
Tehát ez ilyen helyre az sokkal jobb. xD Azért írom, mert csak kiváncsi vagyok, hogy mért vetted le. ( Nem rosszból, csak kiváncsiság ).
-
\" post=\"139968\" timestamp=\"1306090958\"]
A legelsõ sort amikor egyenlõvéteszem a változót az fHealth-al azt lekérdezésnek szántam.
[/quote]
De a te megoldásodban az fHealth értéke 0 lesz, mert annak az értékét adod a Zombie-s Health-nek is, ami a második állítás után -2.0 vagy a sebzéstõl függõen, de mínusz lesz. Nézd meg mit írtam én.
Ez most nem épp ehhez kapcsolódik, de megkérdem:
Elég sok helyen new const-ot használnak azoknak a tömböknek, amiknek az értékük fix. Mivel ez jóval gyorsabb.
Tehát ez ilyen helyre az sokkal jobb. xD Azért írom, mert csak kiváncsi vagyok, hogy mért vetted le. ( Nem rosszból, csak kiváncsiság ).
[/quote]
Én beleírtam. :o
-
@ZeRo Én ezt értem de pontosan nem utaltál arra hogy az éppen feltüntetett ID kifejezés az fegyver ID-t takar.
És nem írtam hogy rossz a példa. ::|
De hát ezen már túl vagytok.
És csak egy kis példa hogy jobban érteni lehessen a dolgot:
new
const Float: fDamages[] =
{
2.0, // CellID 0 | fegyverID 1
3.0, // CellID 1 | fegyverID 2
5.0, // CellID 2 | fegyverID 3
13.5 // CellID 3 | fegyverID 4
//...
};
És így talán érthetõbb miért is kell az a bizonyos mínusz egy. (-1)
De ha a 0 CellID-re is beteszel egy értéket már nem is kell mínusz eggyel bajlódni több helyen.
new
const Float: fDamages[] =
{
0.000000, // :D
2.0,
3.0,
5.0,
13.5
//...
};
-
@ZeRo Én ezt értem de pontosan nem utaltál arra hogy az éppen feltüntetett ID kifejezés az fegyver ID-t takar.
És nem írtam hogy rossz a példa. ::|
De hát ezen már túl vagytok.
És csak egy kis példa hogy jobban érteni lehessen a dolgot:
new
const Float: fDamages[] =
{
2.0, // CellID 0 | fegyverID 1
3.0, // CellID 1 | fegyverID 2
5.0, // CellID 2 | fegyverID 3
13.5 // CellID 3 | fegyverID 4
//...
};
És így talán érthetõbb miért is kell az a bizonyos mínusz egy. (-1)
De ha a 0 CellID-re is beteszel egy értéket már nem is kell mínusz eggyel bajlódni több helyen.
new
const Float: fDamages[] =
{
0.000000, // :D
2.0,
3.0,
5.0,
13.5
//...
};
Nem is akartam ilyen \"durvának\" vagy ilyesminek hangzani, csak hát írásban ezt nehéz érzékeltetni. ;D Egyébként azt hittem, hogy az elsõ hozzászólásomban a komment mindent megmagyaráz - de ezek szerint mégsem, de végülis így ketten csak tisztáztuk azt hiszem. :D
Egyébként jó ötlet a 0.0 érték adása. ;)
-
:/ Nem mûködik a vektor :(
Dupla hozzászólás automatikusan összefûzve. ( 2011. május 23. - 16:43:54 )
Többször teszteltem és még indig nem jó :S
A scriptet is átnéztem és nem láttam gondot :/
-
Rakd ki a kódot, amibe állítod, megnézem. Mer ennek mûködnie kell.
-
Rakd ki a kódot, amibe állítod, megnézem. Mer ennek mûködnie kell.
Mûködik, már tudom mi volt a hiba.
OFF:Am valaki vekotrrol nem csinálna egy leírást? Tök hasznos lenne :)
-
\" post=\"140398\" timestamp=\"1306257150\"]
Rakd ki a kódot, amibe állítod, megnézem. Mer ennek mûködnie kell.
[/quote]
Mûködik, már tudom mi volt a hiba.
OFF:Am valaki vekotrrol nem csinálna egy leírást? Tök hasznos lenne :)
[/quote]
Majd én, egy nagyobb leírásba belefoglalom. Egyébként zárhatok?