[How To] Eigene Quests schreiben
Benötigt:
Notepad++ mit Lua Syntax Hilighting
Eine Liste der Quest funktionen (Ist dabei^^)
Geduld
Ein Gehirn
Umlaute: * untested
�* : \195\160 | ò : \195\178 | è : \195\168 | ì : \195\172 | ù : \195\185
á : \195\161 | ó : \195\179 | é : \195\169 | �* : \195\173 | ú : \195\186
â : \195\162 | ô : \195\180 | ê : \195\170 | î : \195\174 | û : \195\187
ã : \195\163 | õ : \195\181 | ë : \195\171 | ï : \195\175 | ü : \195\188
ä : \195\164 | ö : \195\182
æ: \195\166 | ø : \195\184
ç : \195\167
ñ : \195\177
Ä : \195\132
Ö : \195\150
Ü : \195\156
ß : \195\159
Einfach statt dem Buchstaben schreiben.
Quest funktionen:
__give_char_priv
addimage
addmapsignal
affect.add
affect.remove
affect.remove_bad
affect.remove_good
bool_to_str
building.get_land_id
building.get_land_info
building.has_land
building.set_land_owner
char_log
chat
clear_server_timer
clearmapsignal
cleartimer
cmdchat
color
complete_quest
complete_quest_state
confirm
sys_log
d.check_eliminated
d.clear_regen
d.count_monster
d.exit
d.exit_all
d.exit_all_to_start_position
d.get_kill_mob_count
d.get_kill_stone_count
d.get_map_index
d.getf
d.is_unique_dead
d.is_use_potion
d.join
d.jump_all
d.jump_all_local
d.kill_unique
d.new_jump
d.new_jump_all
d.purge
d.purge_unique
d.regen_file
d.revived
d.select
d.set_dest
d.set_exit_all_at_eliminate
d.set_regen_file
d.set_unique
d.set_warp_at_eliminate
d.setf
d.spawn
d.spawn_goto_mob
d.spawn_group
d.spawn_mob
d.spawn_move_group
d.spawn_move_unique
d.spawn_name_mob
d.spawn_stone_door
d.spawn_unique
d.spawn_wooden_door
d.unique_get_hp_perc
d.unique_set_def_grade
d.unique_set_hp
d.unique_set_maxhp
delay
find_npc_by_vnum
find_pc_by_name
find_pc_cond
game.drop_item
game.get_event_flag
game.get_guild_name
game.get_safebox_level
game.get_warp_guild_war_list
game.open_mall
game.open_safebox
game.request_make_guild
game.set_event_flag
game.set_safebox_level
get_global_time
get_locale
get_server_timer_arg
get_time
guild.around_ranking_string
guild.get_any_war
guild.get_ladder_point
guild.get_name
guild.get_rank
guild.get_reserve_war_table
guild.get_warp_war_list
guild.high_ranking_string
guild.is_bet
guild.is_war
guild.level
guild.name
guild.war_bet
guild.war_enter
highscore.register
highscore.show
horse.advance
horse.feed
horse.get_grade
horse.get_health
horse.get_health_pct
horse.get_hp
horse.get_level
horse.get_stamina
horse.get_stamina_pct
horse.is_dead
horse.is_mine
horse.is_riding
horse.revive
horse.ride
horse.set_level
horse.summon
horse.unride
horse.unsummon
input
is_test_server
item.get_count
item.get_level
item.get_name
item.get_refine_vnum
item.get_size
item.get_socket
item.get_sub_type
item.get_type
item.get_value
item.get_vnum
item.has_flag
item.next_refine_vnum
item.remove
item.set_socket
item_name
loop_timer
makequestbutton
marriage.divorce_time_check
marriage.end_wedding
marriage.engage_to
marriage.find_married_vid
marriage.get_married_time
marriage.get_wedding_list
marriage.join_wedding
marriage.marry_to
marriage.remove
marriage.set_to_marriage
marriage.warp_to_my_marriage_map
marriage.wedding_dark
marriage.wedding_snow
marriage.wedding_music
marriage.wedding_is_playing_music
math.floor
math.max
math.mod
math.random
member.chat
member.clear_ready
member.set_ready
mob.spawn
mob.spawn_group
mob_name
mob_vnum
next_time_is_now
next_time_set
notice
npc.dec_remain_hairdye_count
npc.dec_remain_skill_book_count
npc.get_empire
npc.get_race
npc.get_remain_hairdye_count
npc.get_remain_skill_book_count
npc.getrace
npc.is_near
npc.is_near_vid
npc.is_pc
npc.is_quest
npc.kill
npc.lock
npc.open_shop
npc.purge
npc.unlock
npc_get_job
npc_is_same_empire
npc_is_same_job
number
party.chat
party.clear_ready
party.get_max_level
party.get_near_count
party.getf
party.is_leader
party.is_party
party.run_cinematic
party.setf
party.setqf
party.show_cinematic
party.syschat
pc.aggregate_monster
pc.change_alignment
pc.change_gold
pc.change_money
pc.change_sp
pc.changealignment
pc.changegold
pc.changemoney
pc.clear_skill
pc.clear_sub_skill
pc.clear_one_skill
pc.count_item
pc.countitem
pc.delqf
pc.destroy_guild
pc.enough_inventory
pc.forget_my_attacker
pc.get_armor
pc.get_empire
pc.get_equip_refine_level
pc.get_exp
pc.get_gold
pc.get_guild
pc.get_horse_level
pc.get_hp
pc.get_job
pc.get_leadership
pc.get_level
pc.get_local_x
pc.get_local_y
pc.get_map_index
pc.get_max_hp
pc.get_max_sp
pc.get_money
pc.get_name
pc.get_next_exp
pc.get_part
pc.get_playtime
pc.get_sex
pc.get_skill_level
pc.get_sp
pc.get_start_location
pc.get_vid
pc.get_war_map
pc.get_weapon
pc.get_x
pc.get_y
pc.getarmor
pc.getcurrentmapindex
pc.getempire
pc.getf
pc.getgold
pc.getguild
pc.gethp
pc.getleadership
pc.getmaxhp
pc.getmaxsp
pc.getmoney
pc.getname
pc.getplaytime
pc.getqf
pc.get_skill_group
pc.getsp
pc.getweapon
pc.getx
pc.gety
pc.give_exp
pc.give_exp2
pc.give_exp_perc
pc.give_gold
pc.give_item
pc.give_item2
pc.give_item_from_special_item_group
pc.give_lotto
pc.has_guild
pc.has_master_skill
pc.hasguild
pc.have_map_scroll
pc.have_pos_scroll
pc.in_dungeon
pc.is_guild_master
pc.is_horse_alive
pc.is_married
pc.is_mount
pc.is_polymorphed
pc.isguildmaster
pc.mount
pc.pc_attract_ranger
pc.polymorph
pc.refine_equip
pc.remove_from_guild
pc.remove_item
pc.remove_polymorph
pc.removeitem
pc.reset_point
pc.revive_horse
pc.select
pc.set_part
pc.set_warp_location
pc.set_warp_location_local
pc.setf
pc.setqf
pc.set_skill_group
pc.set_skill_level
pc.unmount
pc.warp
pc.warp_exit
pc.warp_local
pc.warp_to_guild_war_observer_position
pc.is_clear_skill_group
pc_find_skill_teacher_vid
pc_find_square_guard_vid
pc_get_exp_bonus
pc_get_village_map_index
pc_is_novice
q.done
q.getcurrentquestindex
q.no_send
q.set_clock
q.set_clock_name
q.set_clock_value
q.set_counter
q.set_counter_name
q.set_counter_value
q.set_icon
q.set_quest_state
q.set_state
q.set_title
q.set_title2
q.setstate
q.start
q.yield
raw_script
restart_quest
say
say_npc_name
say_pc_name
say_reward
say_title
say_item
say_item_vnum
select
select_table
clear_letter
send_letter
send_letter_ex
server_loop_timer
server_timer
set_quest_state
set_state
setbgimage
setcolor
setleftimage
setmapcenterposition
setskin
setstate
show_horse_menu
skill_group_dialog
syschat
table.insert
table.foreach
table.foreachi
table.getn
table_get_random_item
target.clear
target.delete
target.id
target.npc
target.pc
target.pos
target.vid
test_chat
time_hour_to_sec
time_min_to_sec
timer
tonumber
tostring
type
wait
pc.is_engaged
time_to_str
string.format
math.ceil
pc.is_gm
pc.get_gm_level
pc.get_alignment
pc.get_real_alignment
pc.learn_grand_master_skill
pc.is_skill_book_no_delay
pc.remove_skill_book_no_delay
__get_empire_priv_string
__give_empire_priv
npc.get_guild
pc.mining
d.notice
pc.ore_refine
under_han
d.kill_all
d.setqf
__get_guild_priv_string
__give_guild_priv
__get_guildid_byname
item.get_id
item.select
select_item
item.select_cell
pc.diamond_refine
__fish_real_refine_rod
__refine_pick
item.get_cell
building.reconstruct
arena.start_duel
arena.get_duel_list
arena.add_observer
arena.is_in_arena
BuildSkillList
notice_all
warp_all_to_village
say_in_map
goldbar.quest
warp_all_in_map
regen_in_map
kill_all_in_map
notice_in_map
forked.decdeadcount
forked.cleardeadcount
forked.setdeadcount
forked.initkillcount
forked.inckillcount
forked.initmobkillcount
forked.incmobkillcount
forked.getmobkillcount
warp_all_except_my_empire_in_map
warp_all_my_empire_in_map
forked.initforked
warp_to_village
forked.getdeadcount
forked.incbosskillcount
forked.getbosskillcount
forked.getsungziposx
forked.getsungziposy
forked.getpassstartposx
forked.getpassstartposy
forked.getsungzimapindex
forked.getpassmapindex
forked.getpassmapindexbyempire
get_start_mapindex
get_start_pos_X
get_start_pos_Y
forked.getsungzipath
forked.getpasspath
forked.getpasspathbyempire
forked.isforkedmapindex
forked.issungzimapindex
warp_all_to_village_except_my_empire
is_allow_map
oh.candidacy_list
oh.election
oh.candidacy_name
oh.candidacy
oh.takemonarchmoney
pc.teleport
oh.isguildmaster
oh.candidacycount
affect.remove_hair
affect.add_hair
affect.add_collect
affect.add_collect_point
pc.get_premium_remain_sec
oh.ismonarch
oh.spawnmob
oh.monarchbless
oh.monarchpowerup
oh.monarchdefenseup
pc.send_block_mode
command
oxevent.get_status
oxevent.open
oxevent.close
oxevent.quiz
oxevent.end_event
oxevent.get_attender
oxevent.give_item
oxevent.end_event_force
forked.getlevellimit
mgmt.monarch_state
mgmt.monarch_change_lord
oh.frog_to_empire_money
oh.spawnguard
oh.info
oh.transfer
oh.warp
pc.change_sex
pc.change_empire
pc.get_change_empire_count
get_quest_state
affect.remove_collect
Einleitung:
Wir wolllen in diesem Tutorial eine kleine Quest schreiben. Aber das kommt später erstmal müssen wir ja wissen wie eine Quest Datei aufgebaut ist. Und das zeige ich euch jetzt.
Aufbau einer Quest Datei:
Kopf der Datei:
Jede datei fängt so an.
PHP-Code:
Zitat:
quest questname begin
Das startet die Quest
Die States:
Jede Quest file hat sogennante States sie beschreiben die einzelnen Teile einer Quest wie den anfang und das ende.
Diese States funktionieren als Einhänge Punkte/Hooks
Code:
Zitat:
state Statename begin
when waswirdgemacht with Bedingung begin
// restlicher Code
end
end
Jede quest fängt mit dem State start an und wird dann erweitert
Den State wechseln wir über
PHP-Code:
Zitat:
set_state( neuer state)
Die wichtigsten System eigenen States sind leter, info, button, login denn sie bestimmen wann welche funktion aufgerufen wird.
Die When bereiche:
Die when berreiche tauchen an verschiedenen Stellen auf. Sie stellen sicher das die Reihenfolge stimmt und sachen nur kommen wenn sie kommen sollen.
letter = Wenn die Briefe/Quest Briefe geladen werden.
info = Wenn man auf eine Quest drückt
button = fast wie info
login = wenn man sich einloggt -> erklärt warum nach jedem login die Quests wierder auftauchen
levelup = wenn ein neues level erreicht wird
Beispiel:
PHP-Code:
Zitat:
when letter begin // einsatz bei letter funktion
local v=find_npc_by_vnum(20354) // npc auswählen und gucken ob er existiert
if 0==v then // sicherheits check damit keine fehler kommen.
else
target.vid("__TARGET__", v, "Suche NPC bla bla") // NPC mit der Nummer 20354 als Ziel makieren
end
end
Funktionen:
Es gibt sogennante Funktionen die einem Helfen an Daten zukommen.
Diese könnt ihr auch oben in der Funktions liste finden man setzt sie so ein funktionsname(argument1, arugment2) wie das mit den argumenten ist könnt ihr in anderen quest dateien rausfinden.
Los gehts
Also wir brauchen erstmal ne Story die wir Simpel halten.
Sagen wir Die Gemi will Soon nach nem Date fragen.
Und ihr sollt die Nachricht überbringen.
Fangen wir also an:
PHP-Code:
Zitat:
quest adateforgemi begin
state run begin
when login with pc.level<=5 begin
set_state(information)
end
end
state information begin --State Information
when letter begin -- Wenn alle Quest Briefe aufgerufen werden.
send_letter("Bitte hilf mir!") -- Sende neuen Quest Brief "Bittle helft mir!"
end
when button or info begin
say_title("Bitte hilf mir!") -- Den Titel des Briefes sagen
----"1234567890123456789012345678901234567890123456789 0"|
say("Ich habe mich in einen Jungen verliebt.")
say("Sein Name ist Soon, ich traue mich nicht")
say("ihn anzusprechen. Kommt bitte zu mir")
say("ich werde euch auch reich belohnen.")
set_state(gotogemi) -- Wechsele den State zu gotogemei
end
end
state gotogemi begin
when letter begin
local v=find_npc_by_vnum(GEMIVNUM) -- mache v zu Gemi
if 0==v then -- Wenn keine Gemi gefunden wurde dann mach nichts
else
target.vid("__TARGET__", v, "Geh zur Gemi") -- setze die Gemi als neues Ziel
end
end
when letter begin
send_letter("Komm zu mir!")
end
when button or info begin
say_title("Kom zu mir!")
say("Geh zur Gemi")
say("")
end
when __TARGET__.target.click begin
target.delete("__TARGET__")
say("Gemi :")
----"1234567890123456789012345678901234567890123456789 0"|
say("Ich habe mich in einen Jungen verliebt.")
say("Sein Name ist Soon, ich traue mich nicht")
say("ihn anzusprechen. Könntet ihr bitte zu Soon")
say("gehen und ihn für mich nach eine Date fragen?")
say("Ich würde euch reichlich belohnen.")
say("Bitte helft mir!")
say("")
local s = select("Ich helfe doch gerne","Nein, keine Zeit")
if s=1 then
set_state(gotosoon)
else
say("Schade...")
say("")
clear_letter()
q.done()
end
end
end
state gotosoon
when letter begin
local v=find_npc_by_vnum(SOONVNUM)
if 0==v then
else
target.vid("__TARGET__", v, "Geh zu Soon")
end
end
when letter begin
send_letter("Komm zu mir!")
end
when button or info begin
say_title("Geh zu Soon!")
say("Beweg dich zz Soon")
say("")
end
when __TARGET__.target.click begin
target.delete("__TARGET__")
say("Gemi :")
----"1234567890123456789012345678901234567890123456789 0"|
say("Die Gemi will ein Date von mir?")
say("Sag ihr nein ich bin schon verheiratet.")
say("Bis dann...")
say("")
set_state(backtogemi)
end
end
state backtogemi
when letter begin
local v=find_npc_by_vnum(SOONVNUM)
if 0==v then
else
target.vid("__TARGET__", v, "Geh zur Gemi")
end
end
when letter begin
send_letter("Geh zur Gemi!")
end
when button or info begin
say_title("Geh zur Gemi!")
say("Berichte der Gemi")
say("")
end
when __TARGET__.target.click begin
target.delete("__TARGET__")
say("Gemi :")
----"1234567890123456789012345678901234567890123456789 0"|
say("Er ist verheiratet?")
say("Schade aber ich hab dir eine belohnung versprochen.")
say("")
say_reward("Die Gemi gibt dir ein Schwert+9")
pc_giveitem2(VNUM)
clear_letter()
set_state(__COMPLETE__)
end
end
state __COMPLETE__ begin
end
end
Bitte um ein Thanks.
mfg Geos