10-05-2013, 02:18 PM
Chciałbym przedstawić moją interpretację misji Annihilator quest. Na początku krótki wstęp.
1. Wstęp.
Quest składa się z dwóch elementów - pokoju inicjującego quest oraz pokoju z potworami i nagrodami.
![[Image: tpTr0lm.png]](http://i.imgur.com/tpTr0lm.png)
W pierwszej sali wyróżniamy dwa ważne elementy:
Pozycje graczy, na których mają się ustawić. (należy je spisać, przydadzą się do configu (w takim układzie jak przy wpisaniu !pos w grze)
Dźwignia po której użyciu gracze są teleportowani do final roomu. (należy spisać ID dźwigni przed i po użyciu oraz nadać jej Action ID w edytorze mapy).
![[Image: KdLgaPo.png]](http://i.imgur.com/KdLgaPo.png)
Final room z potworami do pokonania oraz nagrodami. Tutaj wyróżniamy wiele elementów:
Pozycje graczy, na na które zostaną przeteleportowani. (należy je spisać, przydadzą się do configu (w takim układzie jak przy wpisaniu !pos w grze)
Kamien, który blokuje przejście. Po jego użyciu zostajemy przeniesieni 2 kratki do przodu (tak, aby nikt nie mógł dołączyć do questu z pokoju nagród)
Nagrody, każda ze skrznek musi mieć unikalny Action ID (skrypt nie zawiera wydawania nagród - można je skonfigurować w skrypcie z tego linku: http://forum.ronit.pl/thread-786.html)
* co prawda nie są zaznaczone, ale pozycje potworów (tutaj demonów) należy również sobie spisać, przyda się to do instalacji
Innowacją w tym skrypcie jest fakt, że quest można dowolnie skonfigurować na określoną ilość graczy - w misji może brać udział dowolna ilość osób zależna od upodobań osoby konfigurującej. W konfiguracji również można zmienić nazwę potworów summonowanych.
2. Instalacja.
2.1. W folderze "actions/scripts/" należy utworzyć nowy plik o nazwie "annihilator.lua" oraz wkleić do niego poniższy kod:
2.2. Do pliku "actions/actions.xml" należy dodać poniższe liniki:
Należy zmienić ACTION_ID_DZWIGNI, ACTION_ID_KAMIENIA na faktyczne wartości Action ID z RME.
2.3. W pliku "lua/global.lua" należy wyszukać:
Oraz dokleić poniżej wartość:
Pamiętając o zmianie wartości SV na wolną wartość!
3. Konfiguracja.
Konfiguracja odbywa się w samym skrypcie LUA:
Nalezy tutaj wpisac wartosc liczbową przedstawiającą minimalny poziom gracza, aby dołączył do questu.
Nazwa potwora, który będzie summonowany na queście.
Konfiguracja dźwigni oraz kamienia:
leverAID - action id dźwigni
lever1 - id dźwigni przed użyciem
lever2 - id dźwigni po użyciu
passAID - action id kamienia blokującego drogę
passID - id kamienia
passDIR - kierunek, w którym kamień ma teleportować (1 - południe->północ; 2 - zachód->wschód)
Pozycje na których będą stali przed rozpoczęciem misji i po jej rozpoczęciu. Jedna linika = jeden gracz. Liczba linii w questPlayersInit i questPlayersDest muszą być sobie równe!
Pozycje, na których mają się pojawić potwory w zadaniu. Jedna linia - jeden potwór.
Centralna część questu - podczas rozpoczynania misji sprawdzane jest to pole i pola obok (sprawdzenie, czy aktualnie inna drużyna nie wykonuje misji). Zaleca się wpisać tutaj jedną z pozycji na którą teleportowany jest gracz.
1. Wstęp.
Quest składa się z dwóch elementów - pokoju inicjującego quest oraz pokoju z potworami i nagrodami.
![[Image: tpTr0lm.png]](http://i.imgur.com/tpTr0lm.png)
W pierwszej sali wyróżniamy dwa ważne elementy:
Pozycje graczy, na których mają się ustawić. (należy je spisać, przydadzą się do configu (w takim układzie jak przy wpisaniu !pos w grze)
Dźwignia po której użyciu gracze są teleportowani do final roomu. (należy spisać ID dźwigni przed i po użyciu oraz nadać jej Action ID w edytorze mapy).
![[Image: KdLgaPo.png]](http://i.imgur.com/KdLgaPo.png)
Final room z potworami do pokonania oraz nagrodami. Tutaj wyróżniamy wiele elementów:
Pozycje graczy, na na które zostaną przeteleportowani. (należy je spisać, przydadzą się do configu (w takim układzie jak przy wpisaniu !pos w grze)
Kamien, który blokuje przejście. Po jego użyciu zostajemy przeniesieni 2 kratki do przodu (tak, aby nikt nie mógł dołączyć do questu z pokoju nagród)
Nagrody, każda ze skrznek musi mieć unikalny Action ID (skrypt nie zawiera wydawania nagród - można je skonfigurować w skrypcie z tego linku: http://forum.ronit.pl/thread-786.html)
* co prawda nie są zaznaczone, ale pozycje potworów (tutaj demonów) należy również sobie spisać, przyda się to do instalacji
Innowacją w tym skrypcie jest fakt, że quest można dowolnie skonfigurować na określoną ilość graczy - w misji może brać udział dowolna ilość osób zależna od upodobań osoby konfigurującej. W konfiguracji również można zmienić nazwę potworów summonowanych.
2. Instalacja.
2.1. W folderze "actions/scripts/" należy utworzyć nowy plik o nazwie "annihilator.lua" oraz wkleić do niego poniższy kod:
PHP Code:
-- ###################################################
-- ## Created by: Piotr Nowak (Matem) ##
-- ## Date: 08.05.2013 ##
-- ## Exclusive for RonIT.pl ##
-- ## Support for this script: ##
-- ## http://forum.ronit.pl/forumdisplay.php?fid=22 ##
-- ###################################################
function onUse(cid, item, frompos, item2, topos)
-- ##########################
-- ## KONFIGURACJA SKRYPTU ##
-- ##########################
local questLevel = 100 -- minimalny poziom gracza aby dolaczyc do questu
local questMonster = "Demon" -- nazwa potwora, ktory jest summonowany na quescie
local config = {leverAID = 5102, lever1 = 5663, lever2 = 5664, passAID = 5101, passID = 1772, passDIR = 1}
-- pozycje, na ktorych gracze musza stanac przed rozpoczeciem misji
local questPlayersInit = { {x=1085, y=148, z=6, stackpos=253},
{x=1085, y=149, z=6, stackpos=253},
{x=1085, y=150, z=6, stackpos=253},
{x=1085, y=151, z=6, stackpos=253}
}
-- pozycje, na ktore gracze zostana teleportowani po uzyciu dzwigni
local questPlayersDest = { {x=1085, y=134, z=6},
{x=1085, y=135, z=6},
{x=1085, y=136, z=6},
{x=1085, y=137, z=6}
}
-- pozycje, na ktorych pojawia sie potwory w chwili wywolania misji
local questMonstersPos = { {x=1082, y=137, z=6},
{x=1082, y=134, z=6},
{x=1088, y=137, z=6},
{x=1088, y=134, z=6},
{x=1085, y=133, z=6},
{x=1085, y=132, z=6}
}
-- centralna czesc pokoju z questem (sprawdzenie, czy aktualnie nie ma w nim innej druzyny
local questAreaCenter = {x=1085, y=135, z=6}
-- wartosc storage, w ktorej zapisywany jest stopien wykonania misji
local questStorageValue = SV_QUESTS["ANNIHILATOR"]
-- ###############################
-- ## NIE ZMIENIAC NIC PONIZEJ! ##
-- ###############################
if #questPlayersInit == #questPlayersDest then
-- lever odblokowany do questu
if item.actionid == config.leverAID then
if item.itemid == config.lever1 then
if isPlayerInArea(questAreaCenter,4) ~= 1 then
local numberOfPlayers = #questPlayersInit
local players = {}
local countPx = 0
for _, ppos in pairs(questPlayersInit) do
local p = getThingfromPos(ppos)
table.insert(players, p)
if p.itemid > 0 then countPx = countPx + 1 end
end
if countPx == numberOfPlayers then
local countPlvl = 0
for _, px in pairs(players) do
if getPlayerLevel(px.uid) >= questLevel then countPlvl = countPlvl + 1 end
end
if countPlvl == numberOfPlayers then
local countPsv = 0
for _, px in pairs(players) do
if getPlayerStorageValue(px.uid, questStorageValue) == -1 then countPsv = countPsv + 1 end
end
if countPsv == numberOfPlayers then
-- czyszczenie questu przed poprzednikami oraz summonowanie "czystych" potworow
for _, pos in pairs(questMonstersPos) do
if (getCreatureName(getThingFromPos({x=pos.x, y=pos.y, z=pos.z, stackpos=255}).cid) == questMonster) then
doRemoveCreatureFromPos({x=pos.x, y=pos.y, z=pos.z, stackpos=255})
end
doSummonCreature(questMonster, pos)
end
for _, pos in pairs(questPlayersDest) do
if (getCreatureName(getThingFromPos({x=pos.x, y=pos.y, z=pos.z, stackpos=255}).cid) == questMonster) then
doRemoveCreatureFromPos({x=pos.x, y=pos.y, z=pos.z, stackpos=255})
end
end
for _, px in pairs(players) do
doTeleportThing(px.uid,questPlayersDest[_])
end
-- "przeciagniecie" dzwigni
doTransformItem(item.uid,config.lever2)
else
doPlayerSendTextMessage(cid, 22, "Ktos juz wykonal ta misje!")
end
else
doPlayerSendTextMessage(cid, 22, "Wszyscy gracze musza miec co najmniej "..questLevel.." poziom doswiadczenia!")
end
else
doPlayerSendTextMessage(cid, 22, "Potrzebujesz 4 graczy, zeby wykonac ta misje!")
end
else
doPlayerSendTextMessage(cid, 22, "Inna druzyna jest w trakcie wykonywania misji. Musisz chwile zaczekac.")
end
-- lever zablokowany
elseif item.itemid == config.lever2 then
if isPlayerInArea(questAreaCenter,4) ~= 1 then
doTransformItem(item.uid,config.lever1)
else
doPlayerSendTextMessage(cid, 22, "Inna druzyna jest w trakcie wykonywania misji. Musisz chwile zaczekac.")
end
end
elseif item.actionid == config.passAID then
if item.itemid == config.passID then
if config.passDIR == 1 then
local player = getThingfromPos({x = frompos.x, y= frompos.y+1, z = frompos.z, stackpos = 253})
if player.uid ~= nil and player.uid > 0 and isPlayer(player.uid) == 1 then
doTeleportThing(player.uid, {x = frompos.x, y= frompos.y-2, z = frompos.z})
end
else
local player = getThingfromPos({x = frompos.x-1, y= frompos.y, z = frompos.z, stackpos = 253})
if player.uid ~= nil and player.uid > 0 and isPlayer(player.uid) == 1 then
doTeleportThing(player.uid, {x = frompos.x+2, y= frompos.y, z = frompos.z})
end
end
end
end
else
print("<ANNIHILATOR.LUA> (Skrypt nie zostal poprawnie skonfigurowany - ilosc wartosci questPlayersInit, questPlayersDest powinna byc sobie rowna)")
end
end
2.2. Do pliku "actions/actions.xml" należy dodać poniższe liniki:
PHP Code:
<action actionid="ACTION_ID_DZWIGNI" script="quests/annihilator.lua" />
<action actionid="ACTION_ID_KAMIENIA" script="quests/annihilator.lua" />
2.3. W pliku "lua/global.lua" należy wyszukać:
PHP Code:
SV_QUESTS = { -- Głowne SV w postępie danego questu
Oraz dokleić poniżej wartość:
PHP Code:
["ANNIHILATOR"] = 5020,
3. Konfiguracja.
Konfiguracja odbywa się w samym skrypcie LUA:
PHP Code:
local questLevel = 100-- minimalny poziom gracza aby dolaczyc do questu
PHP Code:
local questMonster = "Demon" -- nazwa potwora, ktory jest summonowany na quescie
PHP Code:
local config = {leverAID = 5102, lever1 = 5663, lever2 = 5664, passAID = 5101, passID = 1772, passDIR = 1}
leverAID - action id dźwigni
lever1 - id dźwigni przed użyciem
lever2 - id dźwigni po użyciu
passAID - action id kamienia blokującego drogę
passID - id kamienia
passDIR - kierunek, w którym kamień ma teleportować (1 - południe->północ; 2 - zachód->wschód)
PHP Code:
-- pozycje, na ktorych gracze musza stanac przed rozpoczeciem misji
local questPlayersInit = { {x=1085, y=148, z=6, stackpos=253},
{x=1085, y=149, z=6, stackpos=253},
{x=1085, y=150, z=6, stackpos=253},
{x=1085, y=151, z=6, stackpos=253}
}
-- pozycje, na ktore gracze zostana teleportowani po uzyciu dzwigni
local questPlayersDest = { {x=1085, y=134, z=6},
{x=1085, y=135, z=6},
{x=1085, y=136, z=6},
{x=1085, y=137, z=6}
}
Pozycje na których będą stali przed rozpoczęciem misji i po jej rozpoczęciu. Jedna linika = jeden gracz. Liczba linii w questPlayersInit i questPlayersDest muszą być sobie równe!
PHP Code:
-- pozycje, na ktorych pojawia sie potwory w chwili wywolania misji
local questMonstersPos = { {x=1082, y=137, z=6},
{x=1082, y=134, z=6},
{x=1088, y=137, z=6},
{x=1088, y=134, z=6},
{x=1085, y=133, z=6},
{x=1085, y=132, z=6}
}
PHP Code:
-- centralna czesc pokoju z questem (sprawdzenie, czy aktualnie nie ma w nim innej druzyny
local questAreaCenter = {x=1085, y=135, z=6}

