Szerző Téma: GiveWeapon | Új  (Megtekintve 1213 alkalommal)

Nem elérhető Casamiro

  • 1046
    • Profil megtekintése
GiveWeapon | Új
« Dátum: 2012. április 02. - 15:03:23 »
0 Show voters
Tegnap írtam. Ezzel a kóddal egyszerre több fegyvert adhatunk a játékosnak.
 
stock GiveWeapon(playerid, ammo, ...)
{
new x = 0;
for(; x < numargs()-2; x++)
{
GivePlayerWeapon(playerid, getarg(x+2), ammo);
}
}

 
Példa a használatára:
 
GiveWeapon(playerid, 100, 24, 31, 38);

 
Így adtunk neki 100 tölténnyel a 24 -es, a 31 -es, és a 38 -as ID jû fegyverbõl. (Deagle, M4, Minigun)

Új:
Ugyanúgy ezzel a funkcióval egy sorban több fegyvert adhatunk egy játékosnak, de ezzel a kóddal különbözõ töltényekkel. Használata ugyanolyan, csak a fegyver ID után írd be a töltényszámot. Írhatsz annyi fegyvert és lõszert, amennyit szeretnél.
 
stock GiveWeapon(playerid, ...)
{
new x = 1;
for(; x != ((numargs()-1)/2)+1; x++)
{
    GivePlayerWeapon(playerid, getarg((x+x)-1), getarg(x+x));
}
}

 
Például egy M4 -et 250 tölténnyel, Desert Eaglet 50 tölténnyel, és egy 1000 -res sprayt.
 
GiveWeapon(playerid, 31, 250, 24, 50, 41, 1000);
« Utoljára szerkesztve: 2012. április 05. - 16:50:35 írta ScreaM »

GiveWeapon | Új
« Válasz #1 Dátum: 2012. április 04. - 17:51:40 »
0 Show voters
A numargs() az összes argumentum számával tér vissza.
stock GiveWeapon(playerid, ammo, ...)
A playerid az elsõ arg.. az ammo a második és után tetszõlegesen meghatározott egész számok vagy int típusú változók.
Ezért a for ciklust 2-essel kell kezdened, mivel kettõ argument már biztosan szerepel az eljárásban.
new x = 2;

GiveWeapon | Új
« Válasz #2 Dátum: 2012. április 04. - 18:03:26 »
+1 Show voters
Honnan a fenébõl tudtok ilyen funkciókat?  :o

Nem elérhető Casamiro

  • 1046
    • Profil megtekintése
GiveWeapon | Új
« Válasz #3 Dátum: 2012. április 04. - 20:49:32 »
0 Show voters
Idézetet írta: ɐʞzssǝlosz date=1333554700\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"19492\" data-ipsquote-contentclass=\"forums_Topic
A numargs() az összes argumentum számával tér vissza.
stock GiveWeapon(playerid, ammo, ...)
A playerid az elsõ arg.. az ammo a második és után tetszõlegesen meghatározott egész számok vagy int típusú változók.
Ezért a for ciklust 2-essel kell kezdened, mivel kettõ argument már biztosan szerepel az eljárásban.
new x = 2;
 
Én úgy tudom hogy a numargs() az csak a ... -al jelölt rész argumentumait számolja. Nekem egyébként mûködik ahogy írtam, teszteltem, minden rendesen megy.

Nem elérhető DrAkE

  • 2078
    • Profil megtekintése
GiveWeapon | Új
« Válasz #4 Dátum: 2012. április 04. - 22:28:55 »
+2 Show voters
Nem tudom, te hogy tesztelted, de nekem ezekkel tér vissza:
 

[22:27:42] ammo: 1000
[22:27:42] weapons: 97
[22:27:42] ammo: 1000
[22:27:42] weapons: 0
[22:27:42] ammo: 1000
[22:27:42] weapons: 32
[22:27:42] ammo: 1000
[22:27:42] weapons: 54
[22:27:42] ammo: 1000
[22:27:42] weapons: 643
[22:27:42] ammo: 1000
[22:27:42] weapons: 75
[22:27:42] ammo: 1000
[22:27:42] weapons: 643

 
Kód:
 

#include <a_samp>
public OnFilterScriptInit()
{
GiveWeapon(0, 1000, 32, 54, 643, 75, 643);
return 1;
}
public OnFilterScriptExit()
{
return 1;
}
stock GiveWeapon(playerid, ammo, ...)
{
new x = 0;
for(; x < numargs(); x++)
{
//GivePlayerWeapon(playerid, getarg(x), ammo);
printf(\"ammo: %d\", ammo);
printf(\"weapons: %d\", getarg(x));
}
}

 
És a pontos kód így nézne ki:
 

stock GiveWeapon(playerid, ammo, ...)
{
new x = 0;
for(; x < numargs()-2; x++)
{
GivePlayerWeapon(playerid, getarg(x+2), ammo);
}
}

 
És így már tökéletes is:
 

[22:32:28] ammo: 1000
[22:32:28] weapons: 32
[22:32:28] ammo: 1000
[22:32:28] weapons: 54
[22:32:28] ammo: 1000
[22:32:28] weapons: 643
[22:32:28] ammo: 1000
[22:32:28] weapons: 75
[22:32:28] ammo: 1000
[22:32:28] weapons: 643

 
Illetve az alábbi kód is hibás:
 

stock GiveWeapon(playerid, ...)
{
new x = 0;
for(; x < numargs(); x++)
{
    GivePlayerWeapon(playerid, getarg(x), getarg(x+1));
}
}

 
Nekem az alábbit adta ki:
 

[09:59:50] weapons: 45
[09:59:50] ammo: 32
[09:59:50] weapons: 32
[09:59:50] ammo: 1000
[09:59:50] weapons: 1000
[09:59:50] ammo: 54
[09:59:50] weapons: 54
[09:59:50] ammo: 1000
[09:59:50] weapons: 1000
[09:59:50] ammo: 4323
[09:59:50] weapons: 4323
[09:59:50] ammo: 1000
[09:59:50] weapons: 1000
[09:59:50] ammo: 45

 
Helyes használat:
 

stock GiveWeapon(playerid, ...)
{
new x = 1;
for(; x != ((numargs()-1)/2)+1; x++)
{
    GivePlayerWeapon(playerid, getarg((x+x)-1), getarg(x+x));
}
}

 
És nekem már ezt adta ki:
 

[09:57:38] weapons: 32
[09:57:38] ammo: 1000
[09:57:38] weapons: 54
[09:57:38] ammo: 1000
[09:57:38] weapons: 4323
[09:57:38] ammo: 1000
« Utoljára szerkesztve: 2012. április 05. - 10:02:19 írta DrAkE »

Nem elérhető Casamiro

  • 1046
    • Profil megtekintése
GiveWeapon | Új
« Válasz #5 Dátum: 2012. április 05. - 10:32:22 »
0 Show voters
Javítva, kösz.

Nem elérhető DrAkE

  • 2078
    • Profil megtekintése
GiveWeapon | Új
« Válasz #6 Dátum: 2012. április 05. - 10:48:10 »
0 Show voters
A legfelsõ kódot nem kell javítani? :D Mert szerintem igen.

GiveWeapon | Új
« Válasz #7 Dátum: 2012. április 06. - 17:22:55 »
+2 Show voters
Idézetet írta: Casamiro date=1333565372\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"19492\" data-ipsquote-contentclass=\"forums_Topic


A numargs() az összes argumentum számával tér vissza.
stock GiveWeapon(playerid, ammo, ...)
A playerid az elsõ arg.. az ammo a második és után tetszõlegesen meghatározott egész számok vagy int típusú változók.
Ezért a for ciklust 2-essel kell kezdened, mivel kettõ argument már biztosan szerepel az eljárásban.
new x = 2;
 
Én úgy tudom hogy a numargs() az csak a ... -al jelölt rész argumentumait számolja. Nekem egyébként mûködik ahogy írtam, teszteltem, minden rendesen megy.
[/quote]
Rosszul tudod.
Mûködni azért mûködik mert ha nem megfelelõ adatot kap a GivePlayerWeapon funkció akkor nem ad fegyvert.
De ha a playerid értéked lenne annyi ami érvényes weapon id, akkor meglepetésként lenne olyan fegyver is amire nem számítottál.  :D
Edit:
Írtam egy változatot.
[pawn]
stock
GiveWeapon(playerid, ...)
{
new
   x = numargs() - 1;
for(new i = 1; i < x; i++, i++)
{
    GivePlayerWeapon(playerid, getarg(i), getarg(i+1));
}
}
[/pawn]
És az se probléma ha valaki eltéveszti a weaponid ammo párosítást mivel nem fut tovább a ciklus ha nincs ammo érték is megadva.
Használata:
GiveWeapon(playerid,  weaponid, ammo, weaponid, ammo);
Természetesen tetszõlegesen több fegyver id-t és lõszer mennyiséget is meg lehet adni.
GiveWeapon(playerid,  weaponid, ammo, weaponid, ammo, weaponid, ammo, weaponid, ammo, weaponid, ammo);
« Utoljára szerkesztve: 2012. április 06. - 18:14:32 írta ɐʞzssǝlosz »

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal