Skrypty & Kody Quest LUA / 4 Click

Status
Zamknięty.

Mr ImaGu?

Advanced User
Zarejestrowany
Dołączył
Grudzień 13, 2014
Posty
289
Liczba reakcji
10
Witam,
Chcia?em si? spyta? i o ile to mo?liwe ,aby?cie mi to zrobili lub przekszta?cili :
- Quest aby klikn?? 4 pos?gi w r??nych miejscach na mapie ( ustawione w rme )
- Po klikni?ciu na wszystkie ,aby da?o si? odebra? nagrod?.

//
Massage gdy si? kliknie na skrzynk? przed zaliczeniem wszystkich pos?g?w :
- Nie nacisn??e? na wszystkie pos?gi w okolicy Cyclop Stone Statue Room ,znajduje si? ich ,a? 4 po ka?dej stronie tej przestrzeni.

ID Posong?w :
8616
8626
8777
8779

Z g?ry dzi?kuj? i daje rep+ za pomoc !
 
Odp: Quest LUA / 4 Click

Robisz plik ze ka?dy pos?g daje ci okre?lone storage i w tymquescie wpisz linijk? sprawdzajaca te storage 4
 
Odp: Quest LUA / 4 Click

taka amatorska wersja, innej nie ogarne ;p

[LUA]
function onUse(cid, item, fromPos, itemEx, toPos)
local posag = uid
local posagg = uid
local posag2 = uid
local posagg2 = uid

if getCreatureStorage(cid, storage) <= 0 and item.uid == posag then
doPlayerSetStorageValue(cid, storage, wartosc)
elseif getCreatureStorage(cid, storage) == 1 and item.uid == posagg then
doPlayerSetStorageValue(cid, storage, wartosc)
[/LUA]

zelseifuj to az do storage 4, po czym jak ma 4 to dodaj tylko doPlayerSendTextMessage(cid, type, "Kliknales na 4 posagi"), przykladowo

no i dodaj jeszcze jeden if z t? skrzyni?, ?e jak warto?? nie jest r?wna 4 (~= 4) to ma wiadomosc, ze nie kliknal na nie.
 
Odp: Quest LUA / 4 Click

Tak jak kolega @UPUP napisa?. Do actions/actions.xml dodajesz linijk?:
Kod:
<action itemid="8616;8626;8777;8779" event="script" value="posagi.lua"/>
i w actions/scripts tworzysz posagi.lua a w nim:

Kod:
function onUse(cid, item, frompos, item2, topos)
str1 = 1000
str2 = 1001
str3 = 1002
str4 = 1003
if item.id == 8616 and getPlayerStorageValue(cid, str1) < 0 then
setPlayerStorageValue(cid, str1, 1)
doPlayerSendTextMessage(cid, 19, "Odblokowales pierwszy posag!")
elseif if item.id == 8626 and getPlayerStorageValue(cid, str2) < 0 then
setPlayerStorageValue(cid, str2, 1)
doPlayerSendTextMessage(cid, 19, "Odblokowales drugi posag!")
--i tak dalej, chyba rozumiesz idee?
--na koniec dajesz
else
doPlayerSendTextMessage(cid, 19, "Odblokowales juz ten posag!")
end
end

natomiast jesli chodzi o skrzynie to w map editorze nadajesz jej unique id i w action.xml dodajesz linijke a w actions/scripts doddajesz:
Kod:
function onUse(cid, item, frompos, item2, topos)
str1 = 1000
str2 = 1001
str3 = 1002
str4 = 1003
if getPlayerStorageValue(cid, str1) == 1 and getPlayerStorageValue(cid, str2) == 1 and getPlayerStorageValue(cid, str3) == 1 and getPlayerStorageValue(cid, str4) == 1 then
--Tu dajesz kod ktory daje jakas nagrode, np.
doPlayerAddItem(cid, iditemku, ilosc)
else
doPlayerSendTextMessage(cid, 19, "Nie nacisnales na wszystkie posagi w okolicy Cyclop Stone Statue Room ,znajduje sie ich ,az 4 po kazdej stronie tej przestrzeni.")
end
end
Jakby by?y jakie? problemy to pisz, bo pisa?em na szybko ;)

-------
@UP, ehh, i poco sie tak rozpisywa?em xD
 
Ostatnia edycja:
Odp: Quest LUA / 4 Click

Naprawi?em pos?gi panowie powinno by? tak :
function onUse(cid, item, fromPos, itemEx, toPos)
local posag = 1000
local posagg = 1001
local posag2 = 1002
local posagg2 = 1003

if getCreatureStorage(cid, 19) <= 0 and item.uid == 1000 then
doPlayerSetStorageValue(cid, 19, 1)
doPlayerSendTextMessage(cid, 19, "Odblokowales 1 posag!")
elseif getCreatureStorage(cid, 19) == 1 and item.uid == 1001 then
doPlayerSetStorageValue(cid, 19, 1)
doPlayerSendTextMessage(cid, 19, "Odblokowales 2 posag!")
elseif getCreatureStorage(cid, 19) == 1 and item.uid == 1002 then
doPlayerSetStorageValue(cid, 19, 1)
doPlayerSendTextMessage(cid, 19, "Odblokowales 3 posag!")
elseif getCreatureStorage(cid, 19) == 1 and item.uid == 1003 then
doPlayerSetStorageValue(cid, 19, 1)
doPlayerSendTextMessage(cid, 19, "Odblokowales 4 posag!")
else
doPlayerSendTextMessage(cid, 19, "Odblokowales juz ten posag!")
end
end

ALE NIE DZIA?A MI SKRZYNKA POMOCY !!!!
 
Odp: Quest LUA / 4 Click

Spr?buj to zrobi? w 1 skrypcie.

Patrz :
Nadajesz w XML UID skrzynki : <action uniqueid="UID / AID" event="script" value="path to the file"/>
Potem w tym co Ci dalem, pod zmiennymi, czyli zaraz pod ostatni? zmienna, kt?ra nazywa si? posagg2, dodaj takie co? :

[LUA]
if getPlayerStorageValue(cid, wartosc_storage) < 4 then
return doPlayerSendTextMessage(cid, type, "Nie kliknales na posagi!")
end
[/LUA]

My?l?, ?e to powinno rozwi?za? problem, aczkolwiek nie mam 100% pewno?ci.


#edit
Pami?taj, aby warto?? storage i UID, nie zosta?y powt?rzone... Dopilnuj, ?eby Twoje UID / AID tak jak i storage, nie powtarza?o si? w ?adnym innym kodzie.
 
Odp: Quest LUA / 4 Click

@UP
Kod:
if getPlayerStorageValue(cid, wartosc_storage) < 4 then
Aby skrypt zadzia?a? musi sprawdzi? warto?? czterech storage, a nie jednego.

function onUse(cid, item, fromPos, itemEx, toPos)
local posag = 1000
local posagg = 1001
local posag2 = 1002
local posagg2 = 1003


if getCreatureStorage(cid, 19) <= 0 and item.uid == 1000 then
doPlayerSetStorageValue(cid, 19, 1)
doPlayerSendTextMessage(cid, 19, "Odblokowales 1 posag!")
elseif getCreatureStorage(cid, 19) == 1 and item.uid == 1001 then
doPlayerSetStorageValue(cid, 19, 1)
doPlayerSendTextMessage(cid, 19, "Odblokowales 2 posag!")
elseif getCreatureStorage(cid, 19) == 1 and item.uid == 1002 then
doPlayerSetStorageValue(cid, 19, 1)
doPlayerSendTextMessage(cid, 19, "Odblokowales 3 posag!")
elseif getCreatureStorage(cid, 19) == 1 and item.uid == 1003 then
doPlayerSetStorageValue(cid, 19, 1)
doPlayerSendTextMessage(cid, 19, "Odblokowales 4 posag!")
else
doPlayerSendTextMessage(cid, 19, "Odblokowales juz ten posag!")
end
end
To Ci nie zadzia?a, bo w ka?dy pos?g nadaje warto?? 1 storage 19....
Zamiast 19 wstaw kolejno "posag", "posagg", "posag2", "posagg2". i powinno ?miga?. (oczywi?cie bez cudzys?owiu)
 
Odp: Quest LUA / 4 Click

Ale powiec mi 1 :
elseif getCreatureStorage(cid, 19 -tu? ) == 1 and item.uid == 1003 then
doPlayerSetStorageValue(cid, 19-tu? , 1)
doPlayerSendTextMessage(cid, 19-czy tu? , "Odblokowales 4 posag!")
 
Odp: Quest LUA / 4 Click

Wyt?umaczy?em Ci przecie? na priv...
Nie bierz si? za OTS je?li nie potrafisz za?apa? takiej prostej sprawy.
getCreatureStorage(cid, 19 -tu? ) pobiera warto?? danego storage gracza, czyli tak, zamiast 19 musisz wstawi? zmienn? z storage.
doPlayerSetStorageValue(cid, 19-tu? , 1) zmienia warto?? danego storage, czyli tak, tu te? 19 musisz zast?pi? odpowiedni? zmienn?.
doPlayerSendTextMessage(cid, 19-czy tu? , "Odblokowales 4 posag!") wy?wietla tekst danemu graczowi (cid), o stylu(?) 19 (patrz lib>const.lua), o tek?cie "Odblokowales 4 posag!".
 
Odp: Quest LUA / 4 Click

getPlayerStorageValue(cid, NUMEREK STORAGE, JEGO WARTOSC)

cid, to po prostu gracz, kt?ry zosta? podany jako parametr funkcji onUse.
numerek storage, musisz sam ustalic, mo?e to by? 33333 a mo?e to by? 55555, ale z tego co pami?tam, nie mo?e by? wi?ksze ni? 65,500 chyba.
Warto?? storage, je?eli numerek storage by? wolny ( nie by? u?yty w ?adnym innym skrypcie ) to domy?lnie ma warto?? -1, po kliknieciu na 1 posag, ustawiasz na 1...
sprawdzasz potem funkcja kt?r? poda?em w tym po?cie na samej g?rze, czy w?a?nie jego warto?? ma 1, je?eli tak >> Dalsza czesc skryptu, jezeli nie << nic sie nie dzieje:
[LUA]
if getPlayerStorageValue(cid, wartosc) <= 0 then -- mniejsze lub rowne 0, czyli zapewne -1
-- dalsza czesc kodu
else
-- wysylasz np. komunikat, ?e nie nacisnal 1 posagu
[/LUA]
 
Odp: Quest LUA / 4 Click

Wiecie co pogubi?em si? bo ka?dy mi o czym innym pisze xD
Po prostu nie zrobi? tego i tyle :P
Je?eli komu? si? chce to mo?e mi to zrobi? od podstaw ju? z podstawieniem .
Z g?ry dzi?ki :x
Prosz? nie komentowa? xD
 
Odp: Quest LUA / 4 Click

Cz?owieku da?em Ci gotowca prawie ?e ;-; zostaw to, rzu? te robot? w pizdu :X
Ja rozumiem, ?e mo?e z lua nie mia?e? nigdy styczno?ci ale ?opatologicznie to wyt?umaczy?em, naprawde ju? nie ma czego nie rozumie?, a [USER]Logit3ch[/USER] wyt?umaczy? Ci to co ja, dok?adnie to samo. Wi?c jak Ci si? miesza. W tym skrypcie nie ma nic trudnego ani skomplikowanego. Pobierasz z bazy danych funkcj? getPlayerStorageValue storage o jakim? id, je?li jego warto?? jest mniejsza ni? 0 to znaczy, ?e w bazie danych taki storage nie istnieje, czyli po klikni?ciu na pos?g dodajesz za pomoc? funkcji setPlayerStorageValue(cid, NUMER_STORAGE, WARTO??) do bazy danych ten storage, natomiast je?li dany storage ma warto?? wi?ksz? lub r?wn? 0 to znaczy ?e istnieje i pos?g zwr?ci komunikat ?e zosta? ju? klikni?ty. Potem w skrypcie skrzyni sprawdzasz czy wszystkie cztery storage istniej? w bazie danych i maj? warto?? r?wn? 1, je?li tak to daje nagrode, je?li nie to daje komunikat.......................:sad:
 
Odp: Quest LUA / 4 Click

-_- ale to mi dzia?a , ju? to m?wi?em i skrzynka all napisy te? tylko nagrody nie dawa?o rozumiesz:?
T?umacze pisze skrzynka ,a wy pos?gi.
 
Odp: Quest LUA / 4 Click

Nie pisa?e? nic o nagrodzie, w pierwszym po?cie pisa?e? tylko, ?eby da?o si? odebra? nagrode...
Naprawde ju? tyle m?g?by? poszuka?.
Dodawanie itemka - doPlayerAddItem(cid, ID, ILO??)
Dodawanie expa - doPlayerAddExp(cid, ILO??)
 
Odp: Quest LUA / 4 Click

[lua]
local x = UID posagu
local xx = uid posagu
local xxx = uid posagu
local xxxx = uid posagu
local storage = storageValue

function onUse(cid, item, fromPos, itemEx, toPos)
if item.uid == x and getCreatureStorage(cid, storage) <= 0 then
doPlayerSetStorageValue(cid, storage, 1)
elseif item.uid == xx and getCreatoreStorage(cid, storage) == 1 then
doPlayerSetStorageValue(cid, storage, 2)
elseif item.uid == xxx and getCreatureStorage(cid, storage) == 2 then
doPlayerSetStorageValue(cid, storage, 3)
elseif item.uid == xxxx and getCreatureStorage(cid, storage == 3 then
doPlayerSetStorageValue(cid, storage, 4)
doPlayerSendTextMessage(cid, 25, "Wlasnie kliknales na 4 posag, mozesz isc po nagrode")
end
return true
end
[/lua]

To jest ten Tw?j skrypt na posagi
xml sobie uzupelnisz sam, to raczej nic trudnego skopiowac inna linijke w actions.xml i zmienic UID ;o

Skrypt jest raczej mega amatorski, poniewaz sam niegdy? z tym mialem problemy

[lua]
local storage = storageValue -- koniecznie to samo, co ustawisz w tym kodzie, co Ci napisalem wyzej.
function onUse(cid)
if not getCreatureStorage(cid, storage) == 4 then
doPlayerSendCancel(cid, "Nie odblokowales posagow")
else
doPlayerAddItem(cid, ID itemu, amount)
doPlayerAddExperience(cid, ilosc expa)
end
return true
end
[/lua]

Tutaj tez sam zrob sobie XML, a jako UID nadaj to samo, ktore nadasz w map editorze tej skrzynce
 
Ostatnia edycja:
Odp: Quest LUA / 4 Click

local storage = storageValue -- koniecznie to samo, co ustawisz w tym kodzie, co Ci napisalem wyzej.
function onUse(cid)
if not getCreatureStorage(cid, storage) == 4 then
doPlayerSendCancel(cid, "Nie odblokowales posagow")
else
doPlayerAddItem(cid, ID itemu, amount)
doPlayerAddExperience(cid, ilosc expa)
end
return true
end
[USER]Logit3ch[/USER], testowa?e? to?
if not getCreatureStorage(cid, storage) == 4 then nie wydaje mi si?, ?eby to zadzia?a?o poprawnie...if getCreatureStorage(cid, storage) ~= 4 then
Druga sprawa, co si? stanie gdy gracz kliknie drugi raz? A no w?a?nie.

PHP:
local storage = storageValue -- koniecznie to samo, co ustawisz w tym kodzie, co Ci napisalem wyzej.
function onUse(cid)
if getCreatureStorage(cid, storage) ~= 4 then
doPlayerSendCancel(cid, "Nie odblokowales posagow lub wzieles juz nagrode!")
else
doPlayerAddItem(cid, ID itemu, amount)
doPlayerAddExperience(cid, ilosc expa)
setPlayerStorageValue(cid, storage, 5)
end
return true
end
I powinno ?miga? poprawnie :smile:
 
Odp: Quest LUA / 4 Click

Nie testowalem, owszem.

Ale dzieki za poprawk? ;)
 
Odp: Quest LUA / 4 Click

Sami dodacie ograniczenie capa i innych rzeczy.
PHP:
local storage = 1234
local pillarsId = {8616, 8626, 8777, 8779}
local chestId = 2222
local rewards = {2148, 21, 2152, 19} --{id1, count1, id2, count2...}

local function hasAlreadyActiveStatue(cid, id)
local _storage = getCreatureStorage(cid, storage)
local _explode = _storage:explode('_')
if not _explode[1] then
	return false
end
for i = 1, #_explode do
	if _explode[i] == id then
		return true
	end
end
return false
end

function onUse(cid, item, fromPos, itemEx, toPos)
if item.itemid == pillarsId then
	if not hasAlreadyActiveStatue(cid, item.itemid) then
		local _storage = getCreatureStorage(cid, storage)
		doCreatureSetStorage(cid, storage, _storage .. '_' .. item.itemid)
	end
elseif item.itemid == chestId then
	local id = 0
	for i = 1, #pillarsId do
		if hasAlreadyActiveStatue(cid, pillarsId[i]) then
			id = id + 1
		end
	end
	if id == #pillarsId then
		for i = 1, #rewards / 2 do
			doPlayerAddItem(cid, rewards[i * 2 - 1], rewards[i * 2], true)
		end
	else
		doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'Message.')
	end
end
return true
end
 
Status
Zamknięty.
Back
Do góry