Forum poświęcone powstawaniu Belxena OTS
Witam. Mam dla was do zaprezentowania skrypt, a właściwie skrzynkę questową. Quest polega na tym, że gdy pierwszy raz używamy skrzynki w wyznaczonych miejscach pojawiają się wyznaczone potwory. W skrypcie ustawiamy rogi pomieszczenia. Gdy użyjemy skrzynki drugi raz skrypt sprawdza, czy w tym pokoju, a właściwie obszarze wokół rogami jest jakiś potwór. Jeżeli jest, to wyświetla wiadomość ile potworów jeszcze musimy zabić, żeby wziąść nagrodę. Jeżeli wszystkie są wybite to dostajemy wyznaczoną przez nas nagrodę.
No więc przejdźmy do skryptu:
W data/actions/scripts robimy plik chest with kill.lua, a w nim dodajemy taki kod:
Kod:
function onUse(cid, item, frompos, item2, topos)
local nagroda = 2160 -- ID itemu nagrody
local ile = 1 -- Tylko dla itemow, ktore sie da zbeirac. Jezeli to jest normalny item (bron, armor itp.) to wstaw 1
local monsters = {"Demon", "Demon", "Demon"}
local positions = {{x=xxx, y=yyy, z=z}, {x=xxx, y=yyy, z=z}, {x=xxx, y=yyy, z=z}}
local lewy_gorny = {x=xxx, y=yyy, z=z} -- Pozycja lewego gornego rogu pomieszczenia
local prawy_dolny = {x=xxx, y=yyy, z=z} -- Pozycja prawego dolnego rogu pomieszczenia
ile_monsterow = 0 -- Tego nie ruszac
local storage = getPlayerStorageValue(cid, 6555)
if (storage == -1) then
for i=1, #monsters do
doSummonCreature(monsters[i], positions[i])
end
setPlayerStorageValue(cid,6555,1)
elseif (storage == 1) then
for x=lewy_gorny.x, prawy_dolny.x do
for y=lewy_gorny.y, prawy_dolny.y do
local monsterpos = {x=x, y=y, z=lewy_gorny.z}
local monster = getThingfromPos(monsterpos)
if (monster.uid > 0) then
if (isPlayer(monster) == FALSE) then
ile_monsterow = ile_monsterow+1
end
end
end
end
if (ile_monsterow == 0) then
doPlayerAddItem(cid,nagroda,ile)
setPlayerStorageValue(cid,6555,2)
doPlayerSendTextMessage(cid,22,"Pokonales juz wszystkie potwory. W nagrode dostajesz ".. ile .." nazwa itemu.")
else
doPlayerSendTextMessage(cid,22,"Musisz pokonac jeszcze ".. ile_monsterow .." potworow.")
end
elseif (storage == 2) then
doPlayerSendTextMessage(cid,22,"To jest puste.")
end
end
Na górze jest konfiguracja, którą trzeba ustawić. Potwór odpowiada pozycji odpowiadającej mu. Zaznaczyłem czerwonym kolorem pierwszego "Demon" i pierwszą pozycje. Wtedy demon pojawi się na pozycji, która mu odpowiada. Chyba rozumiecie.
Jeżeli używacie TFS to spróbujcie tego kodu jak wam nie działa ten na górze:
Kod:
function onUse(cid, item, frompos, item2, topos)
local nagroda = 2160 -- ID itemu nagrody
local ile = 1 -- Tylko dla itemow, ktore sie da zbeirac. Jezeli to jest normalny item (bron, armor itp.) to wstaw 1
local monsters = {"Demon", "Demon", "Demon"}
local positions = {{x=xxx, y=yyy, z=z}, {x=xxx, y=yyy, z=z}, {x=xxx, y=yyy, z=z}}
local lewy_gorny = {x=xxx, y=yyy, z=z} -- Pozycja lewego gornego rogu pomieszczenia
local prawy_dolny = {x=xxx, y=yyy, z=z} -- Pozycja prawego dolnego rogu pomieszczenia
ile_monsterow = 0 -- Tego nie ruszac
local storage = getPlayerStorageValue(cid, 6555)
if (storage == -1) then
for i=1, #monsters do
doSummonCreature(monsters[i], positions[i])
end
setPlayerStorageValue(cid,6555,1)
elseif (storage == 1) then
for x=lewy_gorny.x, prawy_dolny.x do
for y=lewy_gorny.y, prawy_dolny.y do
local monsterpos = {x=x, y=y, z=lewy_gorny.z}
local monster = getThingfromPos(monsterpos)
if (monster.uid ~= 0) then
if (isPlayer(monster) == FALSE) then
ile_monsterow = ile_monsterow+1
end
end
end
end
if (ile_monsterow == 0) then
doPlayerAddItem(cid,nagroda,ile)
setPlayerStorageValue(cid,6555,2)
doPlayerSendTextMessage(cid,22,"Pokonales juz wszystkie potwory. W nagrode dostajesz ".. ile .." nazwa itemu.")
else
doPlayerSendTextMessage(cid,22,"Musisz pokonac jeszcze ".. ile_monsterow .." potworow.")
end
elseif (storage == 2) then
doPlayerSendTextMessage(cid,22,"To jest puste.")
end
end
Potem do actions.xml dodajemy:
Kod:
<action uniqueid="tutaj uniueid skrzyni" script="chest with kill.lua" />
Uzupełniamy pole zaznaczone na czerwono. Wpisujemy w nim unique id skrzyni. Potem tylko na mapie robimy skrzynie. Ustawiamy jej taki unique id jaki daliśmy w actions.xml. Jeżeli zrobiliście wszystko tak jak opisałem tutaj będzie działać.
Offline