What's new

M?j pierwszy skrypt na Training Monki.

Status
Not open for further replies.

Marlus

Advanced User
Joined
Aug 26, 2010
Messages
168
Reaction score
7
Witam. Chcia?bym tutaj wstawi? m?j pierwszy skrypt, kt?ry napisa?em. Wiem ?e istnieje co? takiego w podobie mojego skryptu, lecz to jest m?j pierwszy i tylko taki mia?em pomys? :) Prosz? o komentarze czy jest dobrze a co poprawi?!

Opis:
Ten skrypt umo?liwia kupno dw?ch Training Monk?w za 15gp za pomoc? poci?gni?cia za wajch? :) Mi?ego u?ywania.


data/actions/scripts/trening.lua
Code:
function onUse(cid, item, fromPosition, itemEx, toPosition)
local t =
{
	cost = 15
	wiadomosc = "W?a?nie zakupiles dwa Training Monki za "..t.cost.."!"
}
	if item.itemid == 1945 then
	    doTransformItem(item.uid, item.itemid+1)
	doPlayerSendTextMessage(cid,19,..t.wiadomosc..)
	doPlayerRemoveMoney(cid, ..t.cost..)
	doCreateMonster(Training Monk, [COLOR="Red"][B]1000, 1000, 7[/B][/COLOR])
	doCreateMonster(Training Monk, [COLOR="Red"][B]1000, 1000, 7[/B][/COLOR])
	elseif item.itemid == 1946 then
		doTransformItem(item.uid, item.itemid-1)
	doPlayerSendTextMessage(cid,19,..t.wiadomosc..)
	doPlayerRemoveMoney(cid, ..t.cost..)
	doCreateMonster(Training Monk, [COLOR="Red"][B]1000, 1000, 7[/B][/COLOR])
	doCreateMonster(Training Monk, [COLOR="Red"][B]1000, 1000, 7[/B][/COLOR])
	return true
	end
end
To co jest pogrubione na czerwono to pozycja, gdzie ma si? zrespi? training monk. Mo?na zmieni?.

data/actions/actions.xml dodajemy linijk?:
PHP:
	<action actionid="9999" event="script" value="trening.lua"/>

Pozdrawiam i czekam na komentarze,
Marlus
 

Marlus

Advanced User
Joined
Aug 26, 2010
Messages
168
Reaction score
7
Odp: M?j pierwszy skrypt na Training Monki.

REFRESH!


Zapraszam do komentowania! :D

@down
Te? tak chcia?em, ale nie znam tego kodu nie umiem tak zrobi? po prostu :p
 
Last edited:

Don Makos

Advanced User
Joined
Aug 26, 2009
Messages
178
Reaction score
8
Odp: M?j pierwszy skrypt na Training Monki.

Zrobi?by? jeszcze ?eby monki znika?y po jakim? czasie, by znowu trzeba by?o je kupi?.
 

Tlos

User
Joined
May 3, 2010
Messages
15
Reaction score
0
Odp: M?j pierwszy skrypt na Training Monki.

Pozycja gdzie ma sie monk zrespic? tak sredni pomysl bo powinien sie ujawnic kolo playera a nei . wiec raczej malo przydatne
 

Marlus

Advanced User
Joined
Aug 26, 2010
Messages
168
Reaction score
7
Odp: M?j pierwszy skrypt na Training Monki.

@UP
To jest do Training Room, pozycje mo?na zmieni?. Ja taki zaawansowany nie jestem ;D
 
Last edited:

Marlus

Advanced User
Joined
Aug 26, 2010
Messages
168
Reaction score
7
Odp: M?j pierwszy skrypt na Training Monki.

~Refresh~

Nikt nie skomentuje?? =]
 

Marlus

Advanced User
Joined
Aug 26, 2010
Messages
168
Reaction score
7
Odp: M?j pierwszy skrypt na Training Monki.

~Refresh~

LUDZIE ZAGL?DA KTO? DO TEGO DZIA?U?? NAWET MOD NIE ZOBACZY CZY ZAAKCEPTOWA? CZY NIE : d

Pozdrawiam,
Marlus
 

Brolly182

User
Joined
Jun 6, 2008
Messages
46
Reaction score
5
Odp: M?j pierwszy skrypt na Training Monki.

No wi?c na start skrypt zawiera wiele b??d?w, bynajmniej na wersji silnika TFS 2.0, a jak wiadomo najlepiej robi? skrypty, kt?re s? kompatybilne z wi?ksz? ilo?ci? silnik?w, oczywi?cie je?li to mo?liwe.
Code:
local t =
{
	cost = 15
	wiadomosc = "W?a?nie zakupiles dwa Training Monki za "..t.cost.."!"
}
Pocz?tek jest okej, chodzi mi tu o zastosowanie zmiennej lokalnej, kt?ra jak wiadomo przyspieszy dzia?anie skryptu. Dalej po deklaracji zmiennej cost nie ma przecinka, co zwr?ci b??d i zatrzyma skrypt. Nast?pnie w zmiennej wiadomosc u?y?e? zmiennej cost, kt?ra znajduje si? w tej samej tabeli. Nie wiem jak nowsze wersje, ale moja "krzyczy", ?e nie zna takiej zmiennej. O wiele bezpieczniej utworzy? z tego dwie osobne zmienne. Jedna b?dzie okre?la?a koszt wst?pu, za? druga b?dzie tablic? z wiadomo?ciami o powodzeniu w przypadku posiadania okre?lonej sumy oraz niepowodzeniu, kiedy nie mamy podanej ilo?ci gp.
Code:
local cost = 15
local text = 
{
	done = "W?a?nie zakupiles dwa Training Monki za "..cost.."gp!",
	fail = "Nie posiadasz wystarczajacej ilosci pieniedzy."
}
Kolejne co wygl?da niezbyt estetycznie to dwa warunki wygl?daj?ce prawie identycznie. W tym przypadku wystarczy tylko jeden oraz dodatkowa tablica zawieraj?ca ID obydw?ch d?wigni jako numer elementu oraz ich ID po przesuni?ciu jako warto?? elementu.
Code:
local dzwignie = 
{
	[1945] = 1946,
	[1946] = 1945
}
Kiedy ju? mamy tablic?, skracamy nasz warunek.
Code:
if dzwignie[item.itemid] then
Tak skonstruowany warunek zwr?ci TRUE, kiedy istnieje element tablicy o numerze item.itemid, no i oczywi?cie FALSE kiedy go nie ma.
Teraz czas sprawdzi? czy gracz posiada wystarczaj?c? ilo?? pieni?dzy, wi?c skorzystamy z kolejnego warunku.
Code:
if doPlayerRemoveMoney(cid, cost) == TRUE then
Oczywi?cie jak idzie si? domy?li? warunek ten si? spe?ni, kiedy funkcja zwr?ci warto?? TRUE czyli wtedy, gdy gracz b?dzie mia? przy sobie wymagan? sum? pieni?dzy.
Nadszed? czas by przesun?? d?wigni?, wy?wietli? tekst oraz stworzy? stworki kt?re pomagaj? nam w treningu. U mnie wygl?da to nast?puj?co:
Code:
doTransformItem(item.uid, dzwignie[item.itemid])
doPlayerSendTextMessage(cid, 19, text.done)
doSummonCreature("Training Monk", {x=1132, y=1125, z=7})
doSummonCreature("Training Monk", {x=1134, y=1125, z=7})
U mnie funkcja tworz?ca potwora wygl?da w taki spos?b doSummonCreature("nazwa potwora", pozycja), u Ciebie mo?e by? jaka? wygodniejsza ale zak?adam, ?e t? tak?e posiadasz.
Teraz w razie niepowodzenia, czyli gdy gracz nie b?dzie mia? przy sobie pieni?dzy niech wy?wietli si? o tym komunikat czyli:
Code:
else
	doPlayerSendTextMessage(cid, 19, text.fail)
end
end
Wpisujemy else jako, ?e nie zosta? spe?niony warunek odno?nie posiadanych pieni?dzy oraz wy?wietlamy tekst informuj?cy o niepowodzeniu, po czym zaka?czamy obydwa warunku.
Nie podawa?em tutaj rozpocz?cia funkcji onUse oraz jej zako?czenia, poniewa? wydaje mi si?, ?e w tym przypadku jest to oczywiste.
Ca?o?? ??cznie z deklaracj? funkcji onUse powinna wygl?da? mniej wi?cej tak:
Code:
function onUse(cid, item, fromPosition, itemEx, toPosition)
	local cost = 15
	local text = 
	{
		done = "Wlasnie zakupiles dwa trainery za "..cost.."gp!",
		fail = "Nie posiadasz wystarczajacej ilosci pieniedzy."
	}
	local dzwignie = 
	{
		[1945] = 1946,
		[1946] = 1945
	}
	if dzwignie[item.itemid] then
		if doPlayerRemoveMoney(cid, cost) == TRUE then
			doTransformItem(item.uid, dzwignie[item.itemid])
			doPlayerSendTextMessage(cid, 19, text.done)
			doSummonCreature("Training Monk", {x=1132, y=1125, z=7})
			doSummonCreature("Training Monk", {x=1134, y=1125, z=7})
		else
			doPlayerSendTextMessage(cid, 19, text.fail)
		end
	end
end

Og?lnie to jak na pierwszy skrypt nie jest ?le ;).
 

Marlus

Advanced User
Joined
Aug 26, 2010
Messages
168
Reaction score
7
Odp: M?j pierwszy skrypt na Training Monki.

A i w?a?nie chodzi?o mi o takie wyt?umaczenie! Teraz ju? mam jakie? wi?ksze poj?cie jak na przysz?o?? robi? skrypty :)

I co do przecinka to si? zgapi?em i zapomnia?em go doda?. :(

A nie powinno by? przypadkiem zamiast:
PHP:
	if dzwignie[item.itemid] then
		if doPlayerRemoveMoney(cid, cost) == TRUE then
to:
PHP:
	if dzwignie[item.itemid] then
		elseif doPlayerRemoveMoney(cid, cost) == TRUE then

No i jak dla mnie powinno by? to (zapomnia?em :p):
PHP:
			doPlayerSendTextMessage(cid, 19, text.fail)
                        return true
		end
	end
end
Chodzi mi o Returna :)
??
Pozdrawiam,
Marlus
 
Last edited:

Brolly182

User
Joined
Jun 6, 2008
Messages
46
Reaction score
5
Odp: M?j pierwszy skrypt na Training Monki.

Code:
[COLOR="Purple"]if dzwignie[item.itemid] then[/COLOR]
        elseif doPlayerRemoveMoney(cid, cost) == TRUE then
definitywnie nie ;)
W tym warunku chodzi o to, aby sprawdzi? czy na pewno przesuwamy d?wigni?, czyli czy u?ywany item jest w tabeli "dzwignia". Dopiero wewn?trz niego sprawdzamy czy gracz ma pieni?dze czy nie.
Je?li zrobisz tak jak napisa?e? to b?dzie to wygl?da?o tak: gracz naciska use na np. armorze jakim? kt?ry ma actionid 9999 tak jak wpisa?e? w actions.xml oraz je?li ten armor nie znajduje si? w tabeli to sprawdza czy masz pieni?dze, wi?c jest to bez sensu. Poza tym zwr?ci b??d bo ka?dy warunek musi by? zako?czony za pomoc? end a w tym przypadku by?oby o jeden end za du?o.
Budowa warunku wygl?da tak:
Code:
if xxx then
Gdy zostanie spe?niony warunek xxx wykona si? wszystko w tym miejscu.
elseif yyy then
Je?li nie spe?ni si? warunek xxx ale spe?ni si? yyy to wykona si? wszystko zamieszczone tutaj.
else
W przypadku gdy nie spe?ni si? ?aden z powy?szych warunk?w wykona si? to co znajduje si? tutaj.
end
mam nadziej?, ?e rozumiesz. Postaram si? teraz przybli?y? Ci dlaczego w tym co napisa?em s? 2 osobne warunki.
Code:
[...]
if dzwignie[item.itemid] then
-- je?li item kt?rego u?ywamy czyli np d?wignia znajduje si? w tabeli dzwignie to warunek si? spe?ni
	if doPlayerRemoveMoney(cid, cost) == TRUE then
-- teraz osobny warunek sprawdzaj?cy czy gracz ma pieni?dze, znajduje si? wewn?trz tamtego pierwszego dla lepszej optymalizacji i skr?cenia kodu
		doTransformItem(item.uid, dzwignie[item.itemid])
		doPlayerSendTextMessage(cid, 19, text.done)
		doSummonCreature("Training Monk", {x=1132, y=1125, z=7})
		doSummonCreature("Training Monk", {x=1134, y=1125, z=7})
	else
-- else odnosi si? do drugiego warunku poniewa? nie by?o ?adnego znacznika end, kt?ry okre?la koniec instrukcji warunkowej. else wykonuje si? gdy ?aden z poprzednich warunk?w nie zostanie spe?niony. w tym przypadku wykona si? gdy gracz nie posiada pieni?dzy
		doPlayerSendTextMessage(cid, 19, text.fail)
	end
-- end zaka?cza drugi warunek
end
-- a ten pierwszy warunek. Tutaj nie stosujemy else itp poniewa? kiedy u?ywany przedmiot nie znajduje si? w naszej tabeli nie robimy nic.
[...]
Je?li chodzi o t?umaczenie czegokolwiek to od razu m?wi? i? nie jest to moja mocna strona ^^, ale mam nadziej?, ?e wiesz co mia?em na my?li.
Co do returna.
return FALSE - ko?czy funkcj? w miejscu gdzie jest wstawiony oraz wy?wietla napis "You can not use this object.". Najcz??ciej u?ywany w przypadku niepowodzenia.
return TRUE - ko?czy funkcj? w miejscu gdzie si? znajduje oraz nie wy?wietla ?adnego napisu. U?ywany w przypadku powodzenia.
Mam tu na my?li napis na dole ekranu gry, tj nad konsol?.

Mam nadziej?, ?e uda?o mi si? wyt?umaczy? tobie o co chodzi.
 

sliwus1996

User
Joined
Apr 30, 2010
Messages
21
Reaction score
0
Odp: M?j pierwszy skrypt na Training Monki.

jak dla mnie nie z?e
jak robi?em 1 czar to exevo gran mas vis przerobi?em to by? m?j 1 czar a to 1 skrypt to jak dla pocz?tkuj?cego to on dokona? wielkiej rzeczy jak dla mnie ja daje 9/10
 
Status
Not open for further replies.
Top