Ist halt die die mit in den Fliegefiles sind.
PHP: Beran
- quest dragon_lair begin
- state start begin
- when 8031.kill or 8032.kill or 8033.kill or 8034.kill begin
- -- spawns a group of mobs at the area of the player with a chance of 1/3
- if (math.random(3) == 1) then
- local group_group = {
- 2425, 2425,
- 2426, 2426,
- 2427
- }
- local group_num = math.random(table.getn(group_group))
- local group_vnum = group_group[group_num]
- mob.spawn_group(group_vnum, pc.get_local_x(), pc.get_local_y(), 1, 1, 1) -- spawn a group of monsters
- end
- end
- end
- end
PHP: Beran_2
- quest dragon_lair_weekly begin
- state start begin
- function set_settings()
- local settings = { }
- -- how long the player has to wait until he can do the quest again
- settings.cooldown_time = 561600 -- 60 seconds * 60 minutes * 24 hours * 6.5 days
- -- how long the player has time to get the items
- settings.time_to_hunt = 7200 -- 2 hours
- -- those items should be hunted
- settings.items_to_hunt = {
- 30198,
- 30199,
- 50721,
- 50722,
- 50723,
- 50725,
- 50726,
- 50727
- }
- -- the amount of items to be hunted. Array field relate to settings.items_to_hunt
- settings.amount_to_hunt = {
- 10,
- 10,
- 50,
- 50,
- 50,
- 50,
- 50,
- 50
- }
- settings.amount_to_pay = 150000
- -- Rewards:
- -- how often he gets a normal item instead of a poly marble
- settings.normal_items_rate = 50 -- in percent
- -- reward tables follow the rules: {vnum, quantity, mininum level, maximum level}
- -- reward items when giving a normal item
- settings.normal_items = {
- {70008, 1}
- }
- -- vnum of the poly marble (to show an icon to the player)
- settings.poly_item_vnum = 71093
- -- mobs to give in a poly marble
- settings.poly_mobs = {
- {175, 6},
- {184, 6},
- {501, 4},
- {502, 4},
- {552, 2, 85},
- {771, 6},
- {1601, 2, 95},
- {2001, 4},
- {2051, 2, 90},
- {2061, 2, 90},
- {2131, 6},
- {5003, 6}
- }
- return settings
- end
- when login or enter or levelup with pc.get_level() >= 105 begin
- set_state(getquest)
- end
- end
- state getquest begin
- when enter begin
- pc.setqf("item_to_hunt", 0)
- pc.setqf("amount_to_hunt", 0)
- end
- -- "Give me polymorph items!"
- when 30122.chat.gameforge.dragon_lair_weekly._010_chat with pc.get_map_index() == 73 begin
- local settings = dragon_lair_weekly.set_settings()
- local time_to_wait = pc.getqf("lasttime") - get_global_time() + settings.cooldown_time
- -- "Ghost of a warrior: "
- say_title(gameforge.dragon_lair_weekly._020_sayTitle)
- if time_to_wait < 0 then
- -- the player has no cooldown any longer
- local item_to_hunt = pc.getqf("item_to_hunt")
- local amount_to_hunt = pc.getqf("amount_to_hunt")
- if item_to_hunt == 0 then
- local table_number = math.random(table.getn(settings.items_to_hunt))
- item_to_hunt = settings.items_to_hunt[table_number]
- amount_to_hunt = settings.amount_to_hunt[table_number]
- pc.setqf("item_to_hunt", item_to_hunt)
- pc.setqf("amount_to_hunt", amount_to_hunt)
- end
- -- "You have to collect %s:"
- say(string.format(gameforge.dragon_lair_weekly._030_say, amount_to_hunt))
- say_item_vnum(item_to_hunt)
- -- "Then I will give you polymorph!"
- say(gameforge.dragon_lair_weekly._040_say)
- -- yes / no
- local accept = select(gameforge.dragon_lair_weekly._050_select, gameforge.dragon_lair_weekly._060_select)
- if accept == 1 then
- set_state(hunt_item)
- else
- say_title(gameforge.dragon_lair_weekly._020_sayTitle)
- -- "You are mean to me!"
- say(gameforge.dragon_lair_weekly._070_say)
- end
- else
- -- player still has cooldown
- -- "You have to wait %s longer!"
- say(string.format(gameforge.dragon_lair_weekly._080_say, get_time_remaining(time_to_wait)))
- end
- end
- end
- state hunt_item begin
- -- returns the amount of items the player still has to hunt
- function get_amount_remaining()
- return (pc.getqf("amount_to_hunt") - pc.count_item(pc.getqf("item_to_hunt")))
- end
- -- returns the time in seconds the player has left collecting the items.
- function get_time_remaining()
- local settings = dragon_lair_weekly.set_settings()
- return (pc.getqf("lasttime") - get_global_time() + settings.time_to_hunt)
- end
- when login begin
- -- add a quest icon and timer
- local time_remaining = dragon_lair_weekly.get_time_remaining()
- q.set_clock(gameforge.dragon_lair_weekly._090_questRest, time_remaining) -- timer that will be shown to the player
- timer("dragon_lair_weekly_timer", time_remaining) -- timer that will trigger the failing of this quest
- if dragon_lair_weekly.get_amount_remaining() > 0 then
- -- "Collect things!"
- send_letter(gameforge.dragon_lair_weekly._100_sendLetter)
- q.set_title(gameforge.dragon_lair_weekly._110_sayTitle)
- else
- -- "Things collected!"
- send_letter(gameforge.dragon_lair_weekly._120_sendLetter)
- q.set_title(gameforge.dragon_lair_weekly._130_sayTitle)
- end
- q.start()
- end
- when enter begin
- local settings = dragon_lair_weekly.set_settings()
- local time_remaining = settings.time_to_hunt
- pc.setqf("lasttime", get_global_time()) -- reset the cooldown
- -- "Collect things!"
- send_letter(gameforge.dragon_lair_weekly._100_sendLetter)
- q.set_title(gameforge.dragon_lair_weekly._110_sayTitle)
- q.set_clock(gameforge.dragon_lair_weekly._090_questRest, time_remaining) -- timer that will trigger the failing of this quest
- timer("dragon_lair_weekly_timer", time_remaining) -- timer that will trigger the failing of this quest
- q.start()
- end
- when info or button begin
- local settings = dragon_lair_weekly.set_settings()
- local amount_remaining = dragon_lair_weekly.get_amount_remaining()
- if (amount_remaining > 0) then
- local time_remaining = dragon_lair_weekly.get_time_remaining()
- if (time_remaining > 0) then
- -- player still has to collect items
- say_title(gameforge.dragon_lair_weekly._110_sayTitle) -- quest title
- -- "You still have to collect %s:"
- say(string.format(gameforge.dragon_lair_weekly._140_say, amount_remaining))
- say_item_vnum(pc.getqf("item_to_hunt"))
- say("")
- say(gameforge.dragon_lair_weekly._090_questRest .. get_time_remaining(time_remaining))
- else
- -- player did not collect the items in time
- -- "You failed collecting the items in time!"
- notice_multiline(gameforge.dragon_lair_weekly._160_notice,notice)
- q.done()
- set_state(getquest) -- reset the quest, but the cooldown remains
- end
- else
- say_title(gameforge.dragon_lair_weekly._130_sayTitle) -- quest title
- -- "You have all needed items. Go back to the warrior Ghost! He is in heavens cave 2"
- say(gameforge.dragon_lair_weekly._150_say)
- end
- end
- when dragon_lair_weekly_timer.timer begin
- -- the player did not collect the items in time
- -- "You failed collecting the items in time!"
- notice_multiline(gameforge.dragon_lair_weekly._160_notice,notice)
- q.done()
- set_state(getquest) -- reset the quest, but the cooldown remains
- end
- when 30122.chat.gameforge.dragon_lair_weekly._010_chat with pc.get_map_index() == 73 begin
- local settings = dragon_lair_weekly.set_settings()
- say_title(gameforge.dragon_lair_weekly._020_sayTitle)
- local amount_remaining = dragon_lair_weekly.get_amount_remaining()
- if amount_remaining > 0 then
- -- the player did not collect enough items
- -- "You still have to collect %s:"
- say(string.format(gameforge.dragon_lair_weekly._140_say, amount_remaining))
- say_item_vnum(pc.getqf("item_to_hunt"))
- -- "Then I will give you polymorph!"
- say(gameforge.dragon_lair_weekly._040_say)
- elseif pc.money < settings.amount_to_pay then
- -- you don't have enough yang to pay
- say(gameforge.dragon_lair_weekly._175_say)
- else
- -- "You want to give me %s ?: "
- say(string.format(gameforge.dragon_lair_weekly._170_say, pc.getqf("amount_to_hunt")))
- say_item_vnum(pc.getqf("item_to_hunt"))
- -- "Yes" / "No"
- local give_item = select(gameforge.dragon_lair_weekly._180_select, gameforge.dragon_lair_weekly._190_select)
- say_title(gameforge.dragon_lair_weekly._020_sayTitle)
- if (give_item == 1) then
- -- "Thanks, now you get this from me: "
- -- see if a normal item, or a polymorph item should be given
- if math.random(100) < settings.normal_items_rate then -- normal item
- say(gameforge.dragon_lair_weekly._205_sayReward)
- local award_vnum = get_random_vnum_from_table(settings.normal_items)
- say_item_vnum(award_vnum)
- pc.give_item2(award_vnum)
- else -- polymorph item
- say(gameforge.dragon_lair_weekly._200_sayReward)
- local award_vnum = get_random_vnum_from_table(settings.poly_mobs)
- say_item(item_name(settings.poly_item_vnum), settings.poly_item_vnum, mob_name(award_vnum))
- pc.give_poly_marble(award_vnum) -- give a poly morph item with this mob vnum in it
- end
- pc.remove_item(pc.getqf("item_to_hunt"), pc.getqf("amount_to_hunt")) -- remove the questitems from inventory
- pc.changemoney(settings.amount_to_pay) -- player pays yang for the item
- q.done()
- set_state(getquest)
- else
- say(gameforge.dragon_lair_weekly._210_say)
- end
- end
- end
- end
- end
Code
- quest dragon_lair_access begin
- state start begin
- function get_settings()
- local settings = {}
- settings.cooldown_time = 3600 -- when can the dragon be killed again?
- settings.group_time = 300 -- how long can players enter after the first one is in the dragon's lair?
- settings.access_item = 30179 -- "Dragon God Symbols"
- settings.dragon_vnum = 2430
- settings.spawn = {}
- settings.spawn.x = 181
- settings.spawn.y = 173
- settings.warp_in = {}
- settings.warp_in.first = {}
- settings.warp_in.last = {}
- settings.warp_in.first.x = 843677
- settings.warp_in.first.y = 1066206
- settings.warp_in.last.x = 844027
- settings.warp_in.last.y = 1067599
- settings.warp_out = {}
- settings.warp_out.first = {}
- settings.warp_out.last = {}
- settings.warp_out.first.x = 9200
- settings.warp_out.first.y = 1206400
- settings.warp_out.last.x = 10900
- settings.warp_out.last.y = 1209100
- settings.room_area = {}
- settings.room_area.first = {}
- settings.room_area.last = {}
- settings.room_area.first.x = 833000
- settings.room_area.first.y = 1062500
- settings.room_area.last.x = 844100
- settings.room_area.last.y = 1071500
- settings.access_item_amount = game.get_event_flag("dragon_lair_amount")
- if (settings.access_item_amount == 0) then
- settings.access_item_amount = 3 -- default value when event flag is not set
- elseif (settings.access_item_amount == -1) then
- settings.access_item_amount = 0 -- no dragon marks needed when event flag -1 (special case)
- end
- return settings
- end
- function get_random_point(area_coordinates)
- return math.random(area_coordinates.first.x, area_coordinates.last.x), math.random(area_coordinates.first.y, area_coordinates.last.y)
- end
- function warp_to_lair()
- local settings = dragon_lair_access.get_settings()
- local x, y = dragon_lair_access.get_random_point(settings.warp_in)
- char_log(pc.get_player_id(), 'LAIR', pc.get_channel_id() ..' WARPTOLAIR: x:'.. x ..', y:' .. y)
- pc.warp(x,y)
- end
- function warp_from_lair()
- local settings = dragon_lair_access.get_settings()
- local x, y = dragon_lair_access.get_random_point(settings.warp_out)
- char_log(pc.get_player_id(), 'LAIR', pc.get_channel_id() ..' WARPFROMLAIR: x:'.. x ..', y:' .. y)
- pc.warp(x,y)
- end
- function warp_all_from_lair()
- local settings = dragon_lair_access.get_settings()
- warp_all_in_area_to_area(settings.room_area.first.x, settings.room_area.first.y, settings.room_area.last.x, settings.room_area.last.y, settings.warp_out.first.x, settings.warp_out.first.y, settings.warp_out.last.x, settings.warp_out.last.y)
- game.set_event_flag("dragon_lair_alive", 0) -- dragon is dead
- char_log(0, 'LAIR', 'WARP ALL')
- end
- function get_time_remaining()
- local settings = dragon_lair_access.get_settings()
- return (game.get_event_flag("dragon_lair_time") + settings.cooldown_time - get_global_time())
- end
- function give_item_to_ghost()
- local settings = dragon_lair_access.get_settings()
- say_title(gameforge.ghost_story._010_sayTitle)
- say(gameforge.dragon_lair_access._130_say)
- say(settings.access_item_amount.."x: ")
- say_item_vnum(settings.access_item)
- local give_item = select(gameforge.dragon_lair_access._140_select, gameforge.locale.cancel)
- if give_item == 1 then
- pc.remove_item(settings.access_item, settings.access_item_amount)
- char_log(pc.get_player_id(), 'LAIR', pc.get_channel_id() ..' GIVE ITEM')
- return true
- else
- return false
- end
- end
- function show_time_remaining(time_remaining)
- q.set_title(gameforge.dragon_lair_access._165_sendLetter)
- send_letter(gameforge.dragon_lair_access._165_sendLetter)
- q.set_clock(gameforge.locale.monkey_dungeon.quest_rest_time, time_remaining)
- timer("dragon_lair_timer", time_remaining)
- notice_multiline(string.format(gameforge.dragon_lair_access._170_notice, time_remaining / 60), notice)
- q.start()
- end
- when enter or login begin
- pc.setqf("is_leader", 0)
- q.done()
- if pc.get_map_index() == 150 and not pc.is_gm() then
- dragon_lair_access.warp_from_lair()
- end
- end
- when blue_dragon_timer.server_timer begin
- game.set_event_flag("dragon_lair_timer_used", 0)
- if game.get_event_flag("dragon_lair_alive") == 1 then
- notice_multiline(gameforge.dragon_lair_access._150_notice, notice_all)
- else
- notice_multiline(gameforge.dragon_lair_access._160_notice, notice_all)
- end
- dragon_lair_access.warp_all_from_lair()
- end
- when 30121.chat.gameforge.dragon_lair_access._010_npcChat with pc.get_map_index() != 150 begin
- local starttime = game.get_event_flag("dragon_lair_time")
- local current_time = get_global_time()
- local settings = dragon_lair_access.get_settings()
- local time_remaining = dragon_lair_access.get_time_remaining()
- if pc.count_item(settings.access_item) >= settings.access_item_amount then
- if starttime + settings.group_time >= current_time then
- local password_input;
- repeat
- say_title(gameforge.ghost_story._010_sayTitle)
- say(gameforge.dragon_lair_access._020_say)
- password_input = tonumber(input())
- if password_input != game.get_event_flag("dragon_lair_password") then
- say_title(gameforge.ghost_story._010_sayTitle)
- say(gameforge.dragon_lair_access._030_say)
- local again = select(gameforge.dragon_lair_access._040_select, gameforge.locale.cancel)
- if again == 2 then
- return
- end
- end
- until password_input == game.get_event_flag("dragon_lair_password")
- if not dragon_lair_access.give_item_to_ghost() then
- return
- end
- -- right password
- pc.setqf("time", starttime)
- dragon_lair_access.warp_to_lair()
- set_state(kill_dragon)
- elseif time_remaining < 0 and npc.lock() then -- it is the first player talking with the ghost
- say_title(gameforge.ghost_story._010_sayTitle)
- say(gameforge.dragon_lair_access._050_say)
- local abort = select(gameforge.dragon_lair_access._060_select, gameforge.locale.cancel)
- if abort == 2 then
- npc.unlock()
- return
- end
- local password_number;
- repeat
- say_title(gameforge.ghost_story._010_sayTitle)
- say(gameforge.dragon_lair_access._070_say)
- password_number = tonumber(input())
- local again;
- if type(password_number) != 'number' then
- say_title(gameforge.ghost_story._010_sayTitle)
- say(gameforge.dragon_lair_access._080_say)
- again = select(gameforge.dragon_lair_access._040_select, gameforge.locale.cancel)
- if again == 2 then
- npc.unlock()
- return
- end
- end
- until type(password_number) == 'number'
- if not dragon_lair_access.give_item_to_ghost() then
- npc.unlock()
- return
- end
- if dragon_lair_access.get_time_remaining() > 0 then
- pc.give_item2(settings.access_item, settings.access_item_amount)
- npc.unlock()
- say_title(gameforge.ghost_story._010_sayTitle)
- say(gameforge.dragon_lair_access._120_say)
- return
- end
- pc.setqf("password", password_number)
- timer("dragon_lair_warptimer", pc.get_channel_id()*2)
- npc.unlock()
- else
- say_title(gameforge.ghost_story._010_sayTitle)
- say(gameforge.dragon_lair_access._120_say)
- return
- end
- else
- say_title(gameforge.ghost_story._010_sayTitle)
- say(gameforge.dragon_lair_access._100_say)
- say(gameforge.dragon_lair_access._105_say)
- say(settings.access_item_amount.."x: ")
- say_item_vnum(settings.access_item)
- return
- end
- end
- when 30121.chat.gameforge.dragon_lair_access._110_npcChat with pc.get_map_index() == 150 begin
- say_title(gameforge.ghost_story._010_sayTitle)
- say(gameforge.dragon_lair_access._115_say)
- local warp = select(gameforge.dragon_lair_access._116_select, gameforge.dragon_lair_access._117_select)
- if warp == 1 then
- dragon_lair_access.warp_from_lair() -- so that GMs get ported out, too
- set_state(start)
- end
- end
- when dragon_lair_warptimer.timer begin
- local settings = dragon_lair_access.get_settings()
- if dragon_lair_access.get_time_remaining() < 0 then
- local starttime = get_global_time()
- game.set_event_flag("dragon_lair_time", starttime) -- set start time
- char_log(pc.get_player_id(), 'LAIR', pc.get_channel_id() ..' SET STARTTIME: ' .. starttime)
- pc.setqf("time", starttime)
- pc.setqf("is_leader", 1)
- game.set_event_flag("dragon_lair_password", pc.getqf("password")) -- set password
- char_log(pc.get_player_id(), 'LAIR', pc.get_channel_id() ..' SET PASSWORD: '.. pc.getqf("password"))
- server_timer("blue_dragon_timer", settings.cooldown_time)
- dragon_lair_access.warp_to_lair()
- set_state(spawn_dragon)
- else
- pc.give_item2(settings.access_item, settings.access_item_amount)
- say_title(gameforge.ghost_story._010_sayTitle)
- say(gameforge.dragon_lair_access._120_say)
- end
- pc.setqf("password", 0)
- end
- end
- state spawn_dragon begin
- when login begin
- local settings = dragon_lair_access.get_settings()
- purge_area(settings.room_area.first.x, settings.room_area.first.y, settings.room_area.last.x, settings.room_area.last.y)
- notice_multiline(string.format(gameforge.dragon_lair_access._090_notice, pc.name), notice_all)
- -- spawn all mobs needed
- mob.spawn_group(settings.dragon_vnum, settings.spawn.x, settings.spawn.y, 1, 1, 1) -- spawn the dragon
- game.set_event_flag("dragon_lair_alive", 1) -- dragon is alive
- char_log(pc.get_player_id(), 'LAIR', pc.get_channel_id() ..' SPAWN DRAGON')
- notice_multiline(string.format(gameforge.dragon_lair_access._145_notice, game.get_event_flag("dragon_lair_password")), notice)
- dragon_lair_access.show_time_remaining(settings.cooldown_time)
- set_state(kill_dragon)
- end
- when 30121.chat.gameforge.dragon_lair_access._110_npcChat with pc.get_map_index() == 150 begin
- say_title(gameforge.ghost_story._010_sayTitle)
- say(gameforge.dragon_lair_access._115_say)
- local warp = select(gameforge.dragon_lair_access._116_select, gameforge.dragon_lair_access._117_select)
- if warp == 1 then
- dragon_lair_access.warp_from_lair()
- set_state(start)
- end
- end
- end
- state kill_dragon begin
- when dragon_lair_timer.timer begin
- set_state(start)
- end
- when login begin
- if pc.getqf("time") != game.get_event_flag("dragon_lair_time") or dragon_lair_access.get_time_remaining() <= 0 then
- set_state(start)
- else
- dragon_lair_access.show_time_remaining(dragon_lair_access.get_time_remaining())
- end
- end
- when button or info begin
- notice_multiline(string.format(gameforge.dragon_lair_access._170_notice, dragon_lair_access.get_time_remaining() / 60), notice)
- local settings = dragon_lair_access.get_settings()
- if (pc.getqf("is_leader") == 1 and settings.cooldown_time-dragon_lair_access.get_time_remaining() < settings.group_time) then
- notice_multiline(string.format(gameforge.dragon_lair_access._145_notice, game.get_event_flag("dragon_lair_password")), notice)
- end
- end
- when 30121.chat.gameforge.dragon_lair_access._110_npcChat with pc.get_map_index() == 150 begin
- say_title(gameforge.ghost_story._010_sayTitle)
- say(gameforge.dragon_lair_access._115_say)
- local warp = select(gameforge.dragon_lair_access._116_select, gameforge.dragon_lair_access._117_select)
- if warp == 1 then
- dragon_lair_access.warp_from_lair()
- set_state(start)
- end
- end
- when 20009.chat.gameforge.dragon_lair_access._190_npcChat or 9012.chat.gameforge.dragon_lair_access._190_npcChat or 30121.chat.gameforge.dragon_lair_access._190_npcChat with pc.get_map_index() != 150 begin
- if pc.getqf("time") > 0 and pc.getqf("time") == game.get_event_flag("dragon_lair_time") then
- dragon_lair_access.warp_to_lair()
- else
- say_title(gameforge.neutral_warp._20_sayTitle)
- say(gameforge.dragon_lair_access._120_say)
- set_state(start)
- end
- end
- when 2493.kill with pc.get_map_index() == 150 begin
- char_log(pc.get_player_id(), 'LAIR', pc.get_channel_id() ..' DRAGON KILLED')
- game.set_event_flag("dragon_lair_alive", 0) -- dragon is dead
- game.drop_item_with_ownership(71123, 1) -- dropping dragon scale
- game.drop_item_with_ownership(71129, 1) -- dropping toe nail
- notice_multiline(string.format(gameforge.dragon_lair_access._180_notice, pc.name), notice_all) -- the dragon has been killed by <name>!
- local settings = dragon_lair_access.get_settings()
- end
- end
- end