Szerző Téma: egy értékhez csak egy másik érték csatlakozhat  (Megtekintve 1604 alkalommal)

Gang[St]e[R]

  • Vendég
egy értékhez csak egy másik érték csatlakozhat
« Dátum: 2011. május 22. - 15:37:03 »
0 Show voters
Ü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?

Nem elérhető ZeRo

  • 4620
  • Ex Globális Moderátor
    • Profil megtekintése
egy értékhez csak egy másik érték csatlakozhat
« Válasz #1 Dátum: 2011. május 22. - 15:51:50 »
0 Show voters
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]

Gang[St]e[R]

  • Vendég
egy értékhez csak egy másik érték csatlakozhat
« Válasz #2 Dátum: 2011. május 22. - 16:04:25 »
0 Show voters
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?
« Utoljára szerkesztve: 2011. május 22. - 16:06:25 írta GangSteR] »

Nem elérhető ZeRo

  • 4620
  • Ex Globális Moderátor
    • Profil megtekintése
egy értékhez csak egy másik érték csatlakozhat
« Válasz #3 Dátum: 2011. május 22. - 16:35:00 »
+1 Show voters
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. ;)

Gang[St]e[R]

  • Vendég
egy értékhez csak egy másik érték csatlakozhat
« Válasz #4 Dátum: 2011. május 22. - 20:02:37 »
0 Show voters
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?
« Utoljára szerkesztve: 2011. május 22. - 20:23:53 írta GangSteR] »

egy értékhez csak egy másik érték csatlakozhat
« Válasz #5 Dátum: 2011. május 22. - 20:37:21 »
0 Show voters
;D
Pont erre akart rávilágítani.
Csak pont rosszul példázta.
 
Idézetet írta: ZeRo date=1306072310\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"8272\" data-ipsquote-contentclass=\"forums_Topic


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

Gang[St]e[R]

  • Vendég
egy értékhez csak egy másik érték csatlakozhat
« Válasz #6 Dátum: 2011. május 22. - 20:38:41 »
0 Show voters
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é?
 
Idézetet írta: GameStar date=1306088979\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"8272\" data-ipsquote-contentclass=\"forums_Topic
new Float:fegyveradatok[][]={
{31.0,5.5}
};
Fegyverid: floatround(fegyveradatok[0][0]), Sebzés: fegyveradatok[0][1]
 
« Utoljára szerkesztve: 2011. május 22. - 20:40:59 írta GangSteR] »

egy értékhez csak egy másik érték csatlakozhat
« Válasz #7 Dátum: 2011. május 22. - 20:48:27 »
0 Show voters
\" 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.

Gang[St]e[R]

  • Vendég
egy értékhez csak egy másik érték csatlakozhat
« Válasz #8 Dátum: 2011. május 22. - 20:52:35 »
0 Show voters

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]

Nem elérhető ZeRo

  • 4620
  • Ex Globális Moderátor
    • Profil megtekintése
egy értékhez csak egy másik érték csatlakozhat
« Válasz #9 Dátum: 2011. május 22. - 20:53:25 »
0 Show voters
Idézetet írta: Zsolesszka date=1306089441\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"8272\" data-ipsquote-contentclass=\"forums_Topic
;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.

Gang[St]e[R]

  • Vendég
egy értékhez csak egy másik érték csatlakozhat
« Válasz #10 Dátum: 2011. május 22. - 20:55:02 »
0 Show voters
\" 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 :)

Nem elérhető ZeRo

  • 4620
  • Ex Globális Moderátor
    • Profil megtekintése
egy értékhez csak egy másik érték csatlakozhat
« Válasz #11 Dátum: 2011. május 22. - 20:59:04 »
0 Show voters
\" 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?

Gang[St]e[R]

  • Vendég
egy értékhez csak egy másik érték csatlakozhat
« Válasz #12 Dátum: 2011. május 22. - 21:02:38 »
0 Show voters
A legelsõ sort amikor egyenlõvéteszem a változót az fHealth-al azt lekérdezésnek szántam.
« Utoljára szerkesztve: 2011. május 22. - 21:04:36 írta GangSteR] »

Nem elérhető kurta999

  • 2759
  • Éllő fédisznó
    • Profil megtekintése
egy értékhez csak egy másik érték csatlakozhat
« Válasz #13 Dátum: 2011. május 22. - 21:19:18 »
0 Show voters
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 ).

Nem elérhető ZeRo

  • 4620
  • Ex Globális Moderátor
    • Profil megtekintése
egy értékhez csak egy másik érték csatlakozhat
« Válasz #14 Dátum: 2011. május 22. - 21:22:00 »
0 Show voters
\" 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

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal