Peršokti į turinį

[Pamoka] Komanda /duoti (duoda žaidėjui pinigų) ZCMD, SSCANF


djtomis123

Recommended Posts

Sveiki SupeGames.lt forumo lankytojai!

 

Taigi šiandien nusprendžiau sukurti pamoka.

Šioje pamokoje pamokinsiu jus kaip reikia sukurti komanda /duoti

Mums reikės:

1. ZMCD

2. SSCANF

 

Na ką pradėkime! 

 

Visu pirma modo viršuje prirašom:

#include <zcmd>
#include <sscanf2>

Na ką sekantis žingsnis, prie jūsų komandų rašysime šį kodą:

CMD:duoti(playerid, params[])
{
	new
	    pID, //Skirtas išgauti žaidėjo id kuriam norima pervesti pinigus
	    pKiekis, //Pinigų suma
	    Float: SavePos[3] //Skirtas išgauti žaidėjo pozicijai
	;
	if(!sscanf(params, "ud", pID, pKiekis))//Įrašome į kintamuosius informacija kuria įvedė žaidėjas
	{
		if( pID != INVALID_PLAYER_ID )//Jei žaidėjo ID yra teisingas, tesiam toliau
		{
			if(GetPlayerMoney(playerid) >= pKiekis)//Jei žaidėjas turi daugiau pinigų už įvesta pinigų skaičiu, tesiam toliau
			{
				if( pKiekis > 1 )//Jei pinigų skaičius yra didesnis už 1, tesiam toliau
				{
					GetPlayerPos( pID, SavePos[ 0 ],SavePos[ 1 ],SavePos[ 2 ] );//Išgaunam žaidėjo pozicija kuriam norima pervesti pinigus
					if( IsPlayerInRangeOfPoint( playerid, 10.0, SavePos[ 0 ],SavePos[ 1 ],SavePos[ 2 ] ) ) //Tikrinam ar žaidėjas norinti pervesti pinigus yra netoliau kaip 10Metrų (Nežinau ar tikslus vienetas  )
					{
						GiveMoney( playerid, -pKiekis );//Jei viska tvarkoje, nuimame žaidėjui pinigus iš jo kišenės ir perduodame kitam (gali būti kad kiti naudoja kita pinigų davimo funkcija tad pasikeiskite "GiveMoney" į savo)
						GiveMoney( pID, pKiekis );//Duodame žaidėjui pinigus

						//Išsiunčiame žinutes
						format( String,280,"{33CCFF}* Gavote [{E08B1B}%d {33CCFF}LT] iš {E08B1B}%s.", pKiekis, zVardas(playerid));
						SendClientMessage( pID, -1, String );

						format( String,280,"{33CCFF}* Davėte [{E08B1B}%d {33CCFF}LT] žaidėjui {E08B1B}( %s ).",pKiekis, zVardas(pID));
						SendClientMessage( playerid, -1, String );
					}
					else//Jei žaidėjas yra toliau nei 10 metrų tai siunčiame žinute.
					{
					    SendErrorMSG(playerid, "{FF6600}Žaidėjas per toli nuo jūsų!");
					}
				}
				else//Jei įrašyta pinigų suma buvo mažesnė už 1
				{
				    SendErrorMSG(playerid, "{FF6600}Minimali pinigų davimo suma 1LT!");
				}
			}
			else//Jei žaidėjas neturi tiek pinigų
			{
			    SendErrorMSG(playerid, "{FF6600}Savo rankose neturi tiek pinigų!");
			}
		}
		else//Jei žaidėjas nera prisijungęs arba neteisingas ivestas name arba id
		{
		    SendErrorMSG(playerid, "{FF6600}Žaidėjas neprisijungęs!");
		}
	}
	else// Jei blogai suvede duomenis duodame informacija ka reikia vesti
	{
	    SendUseMSG(playerid, "{FF6600}/duoti [Žaidėjo vardas/ID][Kiekis].");
	}
	return (true);
} 

Blogai suligiuota, bet kodas yra iskaitomas :)

Pamoka kurta Tomas C++ (Miša)

Redaguota , nario Tomas C++
Nuoroda į komentarą
Dalintis per kitą puslapį

C:\Users\mantas\Desktop\GM mokymosi tikslams\gamemodes\GM.pwn(544) : error 017: undefined symbol "GiveMoney"
C:\Users\mantas\Desktop\GM mokymosi tikslams\gamemodes\GM.pwn(545) : error 017: undefined symbol "GiveMoney"
C:\Users\mantas\Desktop\GM mokymosi tikslams\gamemodes\GM.pwn(548) : error 017: undefined symbol "String"
C:\Users\mantas\Desktop\GM mokymosi tikslams\gamemodes\GM.pwn(549) : error 017: undefined symbol "String"
C:\Users\mantas\Desktop\GM mokymosi tikslams\gamemodes\GM.pwn(551) : error 017: undefined symbol "String"
C:\Users\mantas\Desktop\GM mokymosi tikslams\gamemodes\GM.pwn(552) : error 017: undefined symbol "String"
C:\Users\mantas\Desktop\GM mokymosi tikslams\gamemodes\GM.pwn(556) : error 017: undefined symbol "SendErrorMSG"
C:\Users\mantas\Desktop\GM mokymosi tikslams\gamemodes\GM.pwn(561) : error 017: undefined symbol "SendErrorMSG"
C:\Users\mantas\Desktop\GM mokymosi tikslams\gamemodes\GM.pwn(566) : error 017: undefined symbol "SendErrorMSG"
C:\Users\mantas\Desktop\GM mokymosi tikslams\gamemodes\GM.pwn(571) : error 017: undefined symbol "SendErrorMSG"
C:\Users\mantas\Desktop\GM mokymosi tikslams\gamemodes\GM.pwn(576) : error 017: undefined symbol "SendUseMSG"

Kas čia blogai?Nesmerkit, dar tik pradėjau mokytis.

Nuoroda į komentarą
Dalintis per kitą puslapį

C:\Users\mantas\Desktop\GM mokymosi tikslams\gamemodes\GM.pwn(544) : error 017: undefined symbol "GiveMoney"
C:\Users\mantas\Desktop\GM mokymosi tikslams\gamemodes\GM.pwn(545) : error 017: undefined symbol "GiveMoney"
C:\Users\mantas\Desktop\GM mokymosi tikslams\gamemodes\GM.pwn(548) : error 017: undefined symbol "String"
C:\Users\mantas\Desktop\GM mokymosi tikslams\gamemodes\GM.pwn(549) : error 017: undefined symbol "String"
C:\Users\mantas\Desktop\GM mokymosi tikslams\gamemodes\GM.pwn(551) : error 017: undefined symbol "String"
C:\Users\mantas\Desktop\GM mokymosi tikslams\gamemodes\GM.pwn(552) : error 017: undefined symbol "String"
C:\Users\mantas\Desktop\GM mokymosi tikslams\gamemodes\GM.pwn(556) : error 017: undefined symbol "SendErrorMSG"
C:\Users\mantas\Desktop\GM mokymosi tikslams\gamemodes\GM.pwn(561) : error 017: undefined symbol "SendErrorMSG"
C:\Users\mantas\Desktop\GM mokymosi tikslams\gamemodes\GM.pwn(566) : error 017: undefined symbol "SendErrorMSG"
C:\Users\mantas\Desktop\GM mokymosi tikslams\gamemodes\GM.pwn(571) : error 017: undefined symbol "SendErrorMSG"
C:\Users\mantas\Desktop\GM mokymosi tikslams\gamemodes\GM.pwn(576) : error 017: undefined symbol "SendUseMSG"

Kas čia blogai?Nesmerkit, dar tik pradėjau mokytis.

 

Blogai jo kodas, naudoja neegzistuojančias funkcijas. Žinoma jas galima susikurti pačiam.... Bet KĄ jos turėtų daryti galima tik spėti iš pavadinimo. 

Nuoroda į komentarą
Dalintis per kitą puslapį

(redaguota)

GiveMoney parašyta kad pasikeisti į savo.

 

SendInfoMSG(...); Naudok SendClientMessage(...);

SendErrorMSG(...); Naudok SendClientMessage(...);

SendUseMSG(...); Naudok SendClientMessage(...);


Na jei neturi susikūręs funkcijos duoti pinigams, štai duodu:

Ši funkcija atstato žaidėjo pinigus į 0

stock ResetMoney(playerid)
{
	zInfo[playerid][Pinigai]=0;
	ResetPlayerMoney(playerid);
}

Su šia funkcija galima žaidėjui pridėti bei atimti pinigus

Jei nori atimti skaičių rašyk su minuso ženkliuku, jei pridėti tiesiog skaičių rašyk be jokio ženkliuko 

stock GiveMoney( playerid, gmoney )
{
	new
		rmoney = GetPlayerMoney( playerid );

	if( rmoney < zInfo[ playerid ][ Pinigai ] && rmoney > -1 )
	{
		zInfo[ playerid ][ Pinigai ] = rmoney;
	}

	zInfo[ playerid ][ Pinigai ] +=  gmoney;
	ResetPlayerMoney( playerid );
	GivePlayerMoney( playerid, zInfo[ playerid ][ Pinigai ] );

}

Jį dėk modo gale :)

Tik kintamuosius pasikeisk į savo :)

Redaguota , nario Tomas C++
Nuoroda į komentarą
Dalintis per kitą puslapį


CMD:duoti(playerid, params[])

{

new

LT,

id,

msg [ 75 ]

;

if(sscanf(params, "ud", id, LT)) return SendClientMessage(playerid, -1, "Naudojimas: /duoti V_P");

if(GetPlayerMoney(playerid) < LT) return SendClientMessage(playerid, -1, "Jus neturite man pinigu!");

if(id == INVALID_PLAYER_ID) return SendClientMessage(playerid, -1, "Tokio zaidejo nera!");

format(msg, sizeof msg, "davei %s zaidejui %dLT!", GetPlayerNameEx(id), LT);

SendClientMessage(playerid, -1, msg);

format(msg, sizeof msg, "gavai %dLT is %s", LT, GetPlayerNameEx(playerid));

SendClientMessage(id, -1, msg);

GivePlayerMoney(playerid, -LT);

return GivePlayerMoney(id, LT);

}

stock GetPlayerNameEx(playerid)

{

new

name [ MAX_PLAYER_NAME ]

;

GetPlayerName(playerid, name, MAX_PLAYER_NAME);

return name;

}

Redaguota , nario Matas F.
Nuoroda į komentarą
Dalintis per kitą puslapį

  • Parašė po 2 savaičių...

So, ar kartais GetPlayerMoney( playerid ) nenuskaito čytintų pinigų ? Tai default fukcija ir litus tikrinam ne iš kintamojo, o jau GiveMoney viskas gerai. ( išskyrus tai, kad jis non defined ) Nebent aš klystu ir tai buvo ištaisyta samp xx.xxx.xx versijoje.  :blink:

Redaguota , nario Expert*
Nuoroda į komentarą
Dalintis per kitą puslapį

So, ar kartais GetPlayerMoney( playerid ) nenuskaito čytintų pinigų ? Tai default fukcija ir litus tikrinam ne iš kintamojo, o jau GiveMoney viskas gerai. ( išskyrus tai, kad jis non defined ) Nebent aš klystu ir tai buvo ištaisyta samp xx.xxx.xx versijoje.  :blink:

Ne tu neklysti, bet nėra reikalo į kiekvieną skripto gabalą dėti savo kintamojo. Naudotojas pats turėtų susiprasti ir pasikeisti atitinkamai pagal savo modifikaciją. 

Nuoroda į komentarą
Dalintis per kitą puslapį

Ne tu neklysti, bet nėra reikalo į kiekvieną skripto gabalą dėti savo kintamojo. Naudotojas pats turėtų susiprasti ir pasikeisti atitinkamai pagal savo modifikaciją. 

Tiesiog žmogus padares su default funkcijom ir su modofikuotom, 25% skripto. Čia įspėjimas būtų nenaudoti GetPlayerMoney :)

Dabest part is that - niekas nepadaro normalaus kodo. Mantas F. variantas irgi neužbaigtas.

 

Laukiam teisingo kodo, kas bus šios noob skripterio dvikovos čempijonas ? Stay Toond.

Redaguota , nario Expert*
Nuoroda į komentarą
Dalintis per kitą puslapį

Prisijungti prie diskusijos

Palikti atsakymą galite iš karto, o užsiregistruoti vėliau. Jeigu jau turite paskyrą mūsų forume, Prisijunkite.

Svečias
Atsakyti šioje temoje...

×   Įklijuotas tekstas turi teksto formatavimą.   Pašalinti teksto formatavimą

  Galimi tik 75 veidukai.

×   Nuoroda buvo automatiškai įterpta.   Įterpti nuorodą paprastai

×   Jūsų ankstesnis pranešimas buvo atkurtas.   Išvalyti redaktorių

×   Jūs negalite įkelti nuotraukas tiesiogiai.Įkelkite arba įdėkite nuotraukas iš URL.

  • Šiame puslapyje naršo:   0 nariai

    • Nėra registruotų narių peržiūrinčių šį forumą.

×
×
  • Sukurti naują...