[RELEASE] Devilscatacomb Quest

05/05/2012 20:08 .Alpha.#1
Heyho,

Da ich so eben erfahren hab das eine der aktuelleren Versionen meiner Quest weitergeben wurde (die nicht verkauft wurde sondern nur an 3-4 Leute verschenkt wurde) Release ich die Quest hier.

Das restliche Zeug was dazu gehört, wie zum Beispiel DE Like Mobwerte oder Regen Dateien / SQL Zeugs lege nicht bei da ich den Leuten denen ich die Quest
+ das Zeug verkauft habe nicht schaden will.
__________________________________________________ ____________

Um die Quest einzubauen müsst ihr erstmal Wissen welchen Map Index ihr für
eure devilscatacomb Map habt.
In diesem Beispiel gehe ich vom Map Index 206 aus.

questlib.lua:

Suche nach:
PHP Code:
special 
Füge darunter ein:
PHP Code:
special.dc_map_index 206
special
.dc_map_index_2 207 
Die Quest

PHP Code:
quest devilscatacomb begin
    state start begin
    
        when logout begin
            pc
.remove_item(30311pc.count_item(30311))
            
pc.remove_item(30312pc.count_item(30312))
            
pc.remove_item(30313pc.count_item(30313))
        
end
        
        
        when login begin
            
if pc.get_map_index() == special.dc_map_index then
                
if devilscatacomb.getLevelByCord() > or not next_time_is_now() then
                
                    pc
.warp((5913)*100, (993)*10065) -- 5913x993  591374x
                    
                end
                
                pc
.set_warp_location(655913993)
                
                
say("Finde den Schlüssel um in die")
                
say("zweite Ebene zu gelangen.")    
                
            elseif 
pc.get_map_index() >= (special.dc_map_index 10000) and pc.get_map_index() <= (special.dc_map_index_2 10000then            
                pc
.set_warp_location(655913993)
            
end
        end
        
        
        when 20351.chat
."In die Teufelshöhle" begin  --Enter the Devil Catacomb
            
if pc.get_level() < 120 then
                say
("Der Zugang wird dir verweigert. Deine Erfahrung")
                
say("reicht noch nicht aus, um in der")
                
say("Devil's Catacomb zu überleben. Komm zurrück,")
                
say("wenn du mindestens Level 120 erreicht hast.")
            else
                if 
not next_time_is_now() then
                    say_title
(mob_name(npc.get_race()) ..":")
                    
say("Du musst noch "..next_time_minutes().." warten ...")
                else
                    if 
== pc.getf("deviltower_zone""boss_killed"then
                        say_mob_title
()
                        
say("Du bist noch nicht stark genug ...")
                        
say("Beweis dich erst im Dämonenturm,")
                        
say("ansonsten hast du wahrscheinlich")
                        
say("keine Chance ...")
                        
say("")
                        
say("Geh nun ...")
                        return
                    else
                        
say_title(mob_name(npc.get_race()) ..":")
                        
say("")
                        
say("Willst du die Teufelshöhle betreten?")
                        
local s select("Betreten","Nicht betreten.")
                        if 
== 2 then
                            
return
                        elseif 
== 1 then
                            pc
.warp((3153)*100, (12092)*100)
                        
end
                    end    
                end
            end
        end
        
        
        when kill with pc
.get_map_index() == special.dc_map_index and pc.countitem(30311) < 1 begin
            local rnd 
number(1,100)
            if 
rnd == 6 then
                game
.drop_item_with_ownership(303111)
            
end
        end
        
        
        when 30101.take with item
.vnum == 30311 begin --Teleport to 2nd Stage with the passenger ticket
        
            
if party.is_party() then
            
                
if party.is_leader() then
                    say
("Das Eingangsportal wurde geöffnet.")
                    
say("Geh schnell hindurch!")
                    
wait()
                    
say("Hier beginnt das wahre Abenteuer! Du hast")
                    
say("jedoch nur eine Stunde Zeit, um die Devil's")
                    
say("Catacomb zu erforschen.")
                    
item.remove()
                    
sys_log(0"DC create try by "..pc.get_name())
                    
d.join(special.dc_map_index)
                else
                    
say("Nur der Leiter der Gruppe darf bestimmen.")
                
end
                
            
else
                
say("Ohne Gruppe kommst du nicht weiter.")
            
end
            
        end
        
        
        when login with devilscatacomb
.isInCatacomb() begin
            say
("Zerstöre das Siegel dieses Tores, um die 3. Ebene")
            
say("zu erreichen!")
            
say("Du hast noch 60 Minute(n) Zeit.")
            
loop_timer("item_check"10)
            if 
party.is_leader() then
                d
.set_regen_file("data/dungeon/dc/dc_regen1.txt")
                
d.regen_file("data/dungeon/dc/dc_doors.txt")
                
d.setf("level"2)
                
server_timer("runtime"6pc.get_map_index())
            elseif 
pc.is_gm() and not party.is_party() then
                d
.set_regen_file("data/dungeon/dc/dc_regen1.txt")
                
d.regen_file("data/dungeon/dc/dc_doors.txt")
                
d.setf("level"2)
                
server_timer("runtime"6pc.get_map_index())
            
end
        end
        
        
        when item_check
.timer with d.getf("level") == 3 begin
            
if pc.countitem(30319) >= 1 then
                say
("Du hast den Schrumpfkopf und wirst nun auf die")
                
say("3. Ebene teleportiert.")
                
pc.remove_item(303191)
                
timer("item_check_end"2)
            else
                
d.exit_all()
            
end
        end
        
        
        when item_check_end
.timer begin
            cleartimer
("item_check")
        
end
        
        
        when runtime
.server_timer begin
            
if d.select(get_server_timer_arg()) then
                d
.setf("time"get_time()+60*60*1)
                
devilscatacomb.getTimeLeft()
                
server_timer("runtime_end"60*60get_server_timer_arg())
            
end
        end
        
        
        when runtime_end
.server_timer begin
            
if d.select(get_server_timer_arg()) then
                d
.notice("Die Zeit ist um.")
                
d.exit_all()
            
end
        end

        
        when 30103.click with devilscatacomb
.isInCatacomb() and devilscatacomb.getLevelByCord() == and npc.lock() begin
            say
("Während du den Stein genauer untersuchst, kannst")
            
say("du eine Gravur erkennen.")
            
wait()
            
say("Lediglich der Besitzer des Schrumpfkopfes")
            
say("darf eintreten, nachdem die Siegel dreier Türen")
            
say("aufgebrochen wurden.")
            
say("Wenn du dieses Relikt nicht bei dir trägst, wirst du")
            
say("")
            
say("aus der Devil's Catacomb teleportiert.")
            
wait()
            
local s select("Ja, lass mich eintreten!""Nein, ich möchte nicht eintreten.")
            if 
== 2 then
                
return
            elseif 
== 1 then
                
if pc.count_item(30319) >= 1 then
                    npc
.purge()
                    
d.setf("level"3)
                    
d.purge()
                    
d.clear_regen()
                    
timer("dc_jump_3"6)
                else
                    
say("Du hast keinen Schrumpfkopf und wirst nun")
                    
say("aus der Höhle teleportiert ...")
                    
pc.warp(5913749932565)
                
end
            end
        end
        
        
        when dc_jump_3
.timer begin
            d
.set_regen_file("data/dungeon/dc/dc_regen2.txt")
            
d.notice("Suche den richtigen Metinstein und zerstöre ihn!")
            
devilscatacomb.getTimeLeft()
            
d.jump_all(445112282)
            
local positions devilscatacomb.get3FloorStonePositions()
            for 
1do
                
d.set_unique("fake" .. d.spawn_mob(8138positions[i][1], positions[i][2]))
            
end
            d
.set_unique("real"d.spawn_mob(8138positions[7][1], positions[7][2]))
            
server_loop_timer('dc_stone3_update'10pc.get_map_index())

        
end
        
        
        when dc_stone3_update
.server_timer begin
            
if d.select(get_server_timer_arg()) then
                
if not d.is_unique_dead("real"then
                    
for 1do
                        if 
d.getf("fakedead" .. i) == 0 then
                            
if d.unique_get_hp_perc("fake" .. i) < 30 then
                                
if not d.is_unique_dead("fake" .. ithen
                                    d
.purge_unique("fake" .. i)
                                
end
                                d
.setf("fakedead" .. i1)
                                
d.notice("Du hast den falschen Metinstein zerstört. Finde den richtigen!");
                            
end
                        end
                    end
                
else
                    
server_timer("dc_stone_end3"5get_server_timer_arg())
                    
d.notice("Der richtige Metinstein wurde zerstört. Du darfst nun die 4. Ebene betreten.")
                
end
            
else
                
server_timer('dc_stone3_stop_timer'1get_server_timer_arg())
            
end
        end

        
        when dc_stone3_stop_timer
.server_timer begin
            clear_server_timer
('dc_stone3_update'get_server_timer_arg())
        
end
        
        
        when dc_stone_end3
.server_timer begin
            
if d.select(get_server_timer_arg()) then
                clear_server_timer
('dc_stone3_update'get_server_timer_arg())
                
d.setf("level"4)
                
d.jump_all(334712810)        
                
d.clear_regen()
                
d.set_regen_file("data/dungeon/dc/dc_regen3.txt")
                
d.regen_file("data/dungeon/dc/dc_warps.txt")
                
d.spawn_mob(30104500716)
            
end
        end
        
        
        when 30104.click with devilscatacomb
.isInCatacomb() and devilscatacomb.getLevelByCord() == 4  and npc.lock() begin
            npc
.purge()
            
say_in_map(pc.get_map_index(),"Du hast es geschafft! Hier ist der Ausgang des[ENTER]Labyrinths. Steige nun in die 5. Ebene hinab.")
            
server_timer("dc4_enter"6pc.get_map_index())
        
end
        
        
        when dc4_enter
.server_timer begin
            
if d.select(get_server_timer_arg()) then
                d
.jump_all(391812939)
                
                
d.set_regen_file("data/dungeon/dc/dc_regen4.txt")
                
d.spawn_mob(30102848739)
                
                
local mob_pos = { {1006649}, {979829}, {691822}, {714653}, {848593} }
                
local rnd number(15)
                
d.spawn_mob(2591mob_pos[rnd][1], mob_pos[rnd][2])
                
                
server_timer("dc4_message"3get_server_timer_arg())
            
end
        end
        
        
        when dc4_message
.server_timer begin
            
if d.select(get_server_timer_arg()) then
                d
.notice("Besiege die Dämonenwachen, um das Fratzen-Totem zu erhalten. Es dient dir als Schlüssel zur 6. Ebene.")
                
devilscatacomb.getTimeLeft()
            
end
        end
        
        
        when 30102.take with item
.vnum == 30312 begin
            item
.remove()
            
npc.purge()
            
d.clear_regen()
            
d.purge()
            --
d.notice("You asdasda<sdafregesrgear howling somewhere far. Grim Reaper has been awaken.")
            
d.notice("Aus den Tiefen der Devil's Catacomb dringt ein markerschütterndes Brüllen. Charon ist erwacht.")
            
timer("dc_level_5"6)
        
end
        
        
        when dc_level_5
.timer begin
            d
.jump_all(431212799)
            
timer("dc_level_5_start"5)
        
end
        
        
        when dc_level_5_start
.timer begin
            d
.setf("level"5)
            
d.notice("Besiege Charon und seine schergen!")
            
devilscatacomb.getTimeLeft()
            
d.regen_file("data/dungeon/dc/dc_regen5.txt")
            
d.spawn_mob(25971301699)
        
end
        
        
        when kill begin
            
if devilscatacomb.isInCatacomb() then
                
if npc.race == 2597 then
                    
if d.count_monster() < 25 then
                        d
.setf("level"6)
                        
d.clear_regen()
                        
timer("dc_level_5_end"12)
                    else
                        if 
d.getf("charon_spawns") < 4 then
                            d
.spawn_mob(25971301699)
                            
d.setf("charon_spawns"d.getf("charon_spawns") + 1)
                        else
                            
d.notice("Du hast versagt Charon hat dich mit seinen Schergen")
                            
d.notice("überlistet. Du verlässt nun die Höhle")
                            
local nextTime=get_time()+time_min_to_sec(30)
                            
d.setqf("__NEXT_TIME__"nextTime)
                            
d.exit_all()
                        
end
                    end
                end
                
                
if npc.race == 2598 and  d.getf("level") == 6 then
                    clear_server_timer
("runtime"pc.get_map_index())
                    
clear_server_timer("runtime_end"pc.get_map_index())
                    
notice_all(pc.get_name().." und "..tonumber(party.get_near_count()-1).." weitere Gruppenmitglieder haben Azrael besiegt!")
                    
timer("glory_message"6)
                
end
                
                
if npc.race == 2591 then
                    game
.drop_item_with_ownership(303121)
                
end
            end
        end
        
        
        when dc_level_5_end
.timer begin
            say_in_map
(pc.get_map_index(),"Du hast Charon besiegt! Nun wirst du[ENTER]zur letzten Ebene der Devil's Catacomb[ENTER]teleportiert.")
            
timer("dc_level_6"3)
        
end
        
        
        when dc_level_6
.timer begin
            d
.jump_all(314513187)
            
timer("dc_level_6_into"3)
        
end
        
        when dc_level_6_into
.timer begin
            d
.regen_file("data/dungeon/dc/dc_regen6.txt")
            
d.spawn_mob(2598741103)
            
d.notice("Besiege Azrael!")
        
end
        
        when glory_message
.timer begin
            local text 
"Azrael wurde besiegt. Endlich herrscht[ENTER]Frieden in der Devil's Catacomb. Du wirst nun[ENTER]an die Oberfläche teleportiert."
            
say_in_map(pc.get_map_index(), text)
            
timer("dc_end"20)    
        
end
        
        
        when dc_end
.timer begin
            local nextTime
=get_time()+time_min_to_sec(30)
            
d.setqf("__NEXT_TIME__"nextTime)
            
d.exit_all()
        
end
        
    end
    
    state _FUNC_ begin
    
        
function getLevelByCord()
        
            if 
pc.get_local_x() > 30 and pc.get_local_y() > 45 and pc.get_local_x() < 450 and pc.get_local_y() < 450 then
                
return 1
                
            
elseif pc.get_local_x() > 540 and pc.get_local_y() > 39 and pc.get_local_x() < 1000 and pc.get_local_y() < 462 then
                
return 2
                
            
elseif pc.get_local_x() > 1048 and pc.get_local_y() > 35 and pc.get_local_x() < 1455 and pc.get_local_y() < 458 then
                
return 3
                
            
elseif pc.get_local_x() > 31 and pc.get_local_y() > 541 and pc.get_local_x() < 564 and pc.get_local_y() < 1058 then
                
return 4
                
            
elseif pc.get_local_x() > 650 and pc.get_local_y() > 540 and pc.get_local_x() < 1050 and pc.get_local_y() < 955 then
                
return 5
                
            
elseif pc.get_local_x() > 1175 and pc.get_local_y() > 576 and pc.get_local_x() < 1420 and pc.get_local_y() < 810 then
                
return 6
                
            
else
                return 
0
            end
            
        end
        
        
function isInCatacomb()
        
            if 
pc.get_map_index() >= (special.dc_map_index 10000) and pc.get_map_index() < (special.dc_map_index_2 10000) and pc.in_dungeon() then
                
return true
            
else
                return 
false
            end
            
        end
        
        
function get3FloorStonePositions()
        
            
local positions 
            {
                {
1365352}, {1349150}, {1133167}, {1151364},
                {
1234136}, {1255371}, {1132245},
            }
            
            for 
1do
            
                
local j number(i7)
                
                if 
!= j then
                
                    local t 
positions[i];
                    
positions[i] = positions[j];
                    
positions[j] = t;
                    
                
end
                
            end 
            
            
return positions
            
        end
        
        
function getTimeLeft()
        
            
local secondsLeft = (d.getf("time") - get_time())
            
local minutesLeft math.ceil(secondsLeft 60)
            
            
d.notice("Du hast noch "..minutesLeft.." Minute(n) Zeit.")
        
        
end
        
    end
end 
Anmerkungen: Dies ist eine ziemlich aktuelle Version bis auf kleine Abweichungen ist sie DE Like. Auch die meisten Texte wurden von DE übernommen.
Die Leute die, die Quest bei mir gekauft haben können eine neuere Version bekommen
falls gewollt.
05/05/2012 20:19 Retrograd#2
Schade, dass sie jetzt doch released wurde aber trozdem thx
05/05/2012 20:25 iYoshix3#3
Schade das du es jetzt Released hast...
Wird aber sicher für viele hier nützlich sein.

Mfg
05/05/2012 20:36 Kriegergeist^^#4
schade das du sie pub machen musstest
Benutze trotzdem lieber meine Quest, werde nur das gruppen Porten und den teil von Charon von dir übernehmen ^^
Will nicht frech wirken, aber kannste bitte bitte die regen für das Labyrinth bei legen, wär echt nett von dir <3
aber trotzdem danke ;)

MfG
Kriegergeist^^
05/05/2012 20:48 .Alpha.#5
Anleitung noch mal bearbeitet (questlib.lua Zeug) ~Danke an YaKuZo
05/05/2012 20:50 .iXream.#6
Wie es Mijago vorraus gesehen hat.
05/05/2012 20:56 protii™#7
Spawnen mobs damit ?
05/05/2012 20:59 .Alpha.#8
Quote:
Originally Posted by iDream. View Post
Wie es Mijago vorraus gesehen hat.
Von voraussehen kann man nicht reden wenn es eine 50/50 Chance gibt,
ich hätte sie heute auch nicht Pub machen können und es lassen können.

Ich hätte genauso gut die Personen durchgehen können die sie bekommen
haben und irgendjemanden beschuldigen können und mich mit irgendwelchen
Leuten streiten können ...

Da habe ich allerdings wenig Lust drauf deswegen -> die Version Public.

Wenn ihr sie natürlich nicht möchtet kann ich sie immer noch Löschen :D


Quote:
Originally Posted by protii™ View Post
Spawnen mobs damit ?
Nein, die Spawn (Regen) Dateien sind nicht dabei.
05/05/2012 21:06 Kriegergeist^^#9
wird die Gruppe nur durch den den teil geportet?
PHP Code:
                    d.join(special.dc_map_index
oder gehört noch was dazu? weil ich muss doch noch die kordinaten anpassen ^^

MfG
Kriegergeist^^
05/05/2012 21:11 .Alpha.#10
Quote:
Originally Posted by Kriegergeist^^ View Post
wird die Gruppe nur durch den den teil geportet?
PHP Code:
                    d.join(special.dc_map_index
oder gehört noch was dazu? weil ich muss doch noch die kordinaten anpassen ^^

MfG
Kriegergeist^^
Ja, die Gruppe wird nur durch den Teil teleportiert und landet bei den Koordinaten in der Town.txt
05/05/2012 21:15 Kriegergeist^^#11
das finde ich persönlich bisschen dumm, nichts gegen dich
aber wen man jetzt stirbt und ausversehe auf stadt neu start macht, wird man ja wieder rausgeportet
Oder seh ich das falsch

MfG
Kriegergeist^^
05/05/2012 21:20 ShyLu#12
200€ für nichts :facepalm:

also da versteh ich echt kein Spaß mehr also das geht an die Leute die Geld bezahlt haben und jetz ist sie auch noch Public <.<

find ich echt mies von dir wäre es nur E*GOLD gewesen OK, aber bei 200€ die du verlangt hast finde ich das echt nicht mehr in ordnung
05/05/2012 21:24 .Alpha.#13
Quote:
Originally Posted by .ісз View Post
200€ für nichts :facepalm:

also da versteh ich echt kein Spaß mehr also das geht an die Leute die Geld bezahlt haben und jetz ist sie auch noch Public <.<

find ich echt mies von dir wäre es nur E*GOLD gewesen OK, aber bei 200€ die du verlangt hast finde ich das echt nicht mehr in ordnung
Die Quest kostet nicht alleine 200 Euro sonder mit dem ganzen Extra kram.
Außerdem habe ich schon geschrieben das die Leute die sie gekauft haben gerne
eine neuere Version haben können.

Ich finde es echt mies von dir das du dir raus nimmst mich zu verurteilen nur weil ich Geld für meine Arbeit nehme und den Schaden vermindere in dem ich die Quest publiziere und so alle gleichsetze und
als Entschädigung den Käufern Updates anbiete. Der größte Teil des gekauften ist nicht die Quest ...


Quote:
Originally Posted by Kriegergeist^^ View Post
das finde ich persönlich bisschen dumm, nichts gegen dich
aber wen man jetzt stirbt und ausversehe auf stadt neu start macht, wird man ja wieder rausgeportet
Oder seh ich das falsch

MfG
Kriegergeist^^
Was passiert im DT wenn du Stadt neustarten machst?
05/05/2012 21:35 Kriegergeist^^#14
Quote:
Originally Posted by .Nova. View Post
Was passiert im DT wenn du Stadt neustarten machst?
Also in der Town meines DT stehen die ungefähren kordis, wo man auch geportet wird vom dämonenturm wächter
InGame werde ich da auch hin geportet ;)

MfG
Kriegergeist^^
05/05/2012 21:39 .Alpha.#15
Quote:
Originally Posted by Kriegergeist^^ View Post
Also in der Town meines DT stehen die ungefähren kordis, wo man auch geportet wird vom dämonenturm wächter
InGame werde ich da auch hin geportet ;)

MfG
Kriegergeist^^
Das ganze Stadt Neustart Zeug wird in der Quest vom when login begin
teil gemacht wenn du also willst das man nicht Stadt Neustarten kann
bzw man im Dungeon landet musst du dir was einfallen lassen und es
da reinhauen.

Du könntest auch einfach Clientside einfügen das in Dungeons nur Hier Neustarten erscheint (Dict/Tuple mit Koordinaten oder Mapnamen).