• Home
  • Members
  • Team
  • Help
  • Search
  • Register
  • Login
  • Home
  • Members
  • Help
  • Search
Ronit.GAMES RonEngine Support / Wsparcie dla RonEngine LUA/XML Scripting / Skryptowanie LUA/XML Annihilator quest i jego pochodne

 
  • 0 Vote(s) - 0 Average
Annihilator quest i jego pochodne
czarnowidz
Offline

Uzytkownik
Posts: 11
Threads: 6
Joined: Jun 2010
Reputation: 0
#1
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]
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]
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" /> 
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ć:
PHP Code:
SV_QUESTS = { -- Głowne SV w postępie danego questu 

Oraz dokleić poniżej wartość:
PHP Code:
    ["ANNIHILATOR"] = 5020, 
Pamiętając o zmianie wartości SV na wolną wartość!

3. Konfiguracja.
Konfiguracja odbywa się w samym skrypcie LUA:
PHP Code:
    local questLevel = 100-- minimalny poziom gracza aby dolaczyc do questu 
Nalezy tutaj wpisac wartosc liczbową przedstawiającą minimalny poziom gracza, aby dołączył do questu.
PHP Code:
    local questMonster = "Demon" -- nazwa potwora, ktory jest summonowany na quescie 
Nazwa potwora, który będzie summonowany na queście.
PHP Code:
local config = {leverAID = 5102, lever1 = 5663, lever2 = 5664, passAID = 5101, passID = 1772, passDIR = 1} 
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)

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}
                            } 
Pozycje, na których mają się pojawić potwory w zadaniu. Jedna linia - jeden potwór.
PHP Code:
                                -- centralna czesc pokoju z questem (sprawdzenie, czy aktualnie nie ma w nim innej druzyny
    local questAreaCenter 
= {x=1085, y=135, z=6} 
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.
« Next Oldest | Next Newest »

Users browsing this thread: 1 Guest(s)



  • View a Printable Version
  • Subscribe to this thread
Forum Jump:

© Designed by D&D - Powered by MyBB

Linear Mode
Threaded Mode