diff --git a/share/locale/english/quest/make.py b/share/locale/english/quest/make.py index 77df5bb..18baafe 100644 --- a/share/locale/english/quest/make.py +++ b/share/locale/english/quest/make.py @@ -1,10 +1,28 @@ import sys +import os +import builtins + +# -------------------------------------------------- +# FORCE UTF-8 FOR ALL FILE WRITES +# -------------------------------------------------- +_original_open = builtins.open + +def utf8_open(file, mode="r", buffering=-1, encoding=None, + errors=None, newline=None, closefd=True, opener=None): + if "w" in mode and encoding is None: + encoding = "utf-8" + return _original_open( + file, mode, buffering, encoding, errors, newline, closefd, opener + ) + +builtins.open = utf8_open +# -------------------------------------------------- + sys.dont_write_bytecode = True from pathlib import Path import shutil import subprocess -import os import pre_qc @@ -32,33 +50,29 @@ def main() -> None: pre_qc_dir.mkdir(parents=True, exist_ok=True) if os.name != "nt": - # 1. Check if the 'quest' group actually exists in FreeBSD group_exists = False try: import grp - grp.getgrnam('quest') + grp.getgrnam("quest") group_exists = True except KeyError: print("Warning: Group 'quest' not found. Skipping chgrp.") if group_exists: try: - subprocess.run(["chgrp", "quest", str(object_dir)], check = True) + subprocess.run(["chgrp", "quest", str(object_dir)], check=True) except subprocess.CalledProcessError: print("Failed to change group ownership.") - # 2. Set Permissions (This will work even if chgrp failed) - # Using -R inside subprocess is fine - subprocess.run(["chmod", "-R", "770", str(object_dir)], check = True) + subprocess.run(["chmod", "-R", "770", str(object_dir)], check=True) qc_exe = script_dir / ("qc.exe" if os.name == "nt" else "qc") locale_list_path = script_dir / "locale_list" - if not locale_list_path.exists(): raise FileNotFoundError(f"locale_list nicht gefunden: {locale_list_path}") - with locale_list_path.open("r", encoding="utf-8", errors="ignore") as file: + with _original_open(locale_list_path, "r", encoding="utf-8", errors="ignore") as file: for raw_line in file: line = raw_line.strip() if not line or line.startswith("#"): @@ -68,12 +82,9 @@ def main() -> None: r = pre_qc.run(line) - if r: - filename = pre_qc_dir / line - else: - filename = script_dir / line - + filename = (pre_qc_dir if r else script_dir) / line subprocess.run([str(qc_exe), str(filename)], check=True) + if __name__ == "__main__": main() diff --git a/share/locale/english/quest/new_quest_lv7.quest b/share/locale/english/quest/new_quest_lv7.quest index 0f5f770..6f4c6b4 100644 --- a/share/locale/english/quest/new_quest_lv7.quest +++ b/share/locale/english/quest/new_quest_lv7.quest @@ -1,6 +1,23 @@ - quest new_quest_lv7 begin +-- Flower items and bouquet +define ITEM_FLOWER_RED 30169 -- Red Flower +define ITEM_FLOWER_ORANGE 30170 -- Orange Flower +define ITEM_FLOWER_YELLOW 30171 -- Yellow Flower +define ITEM_BOUQUET 30172 -- Bouquet + +-- Required amounts +define NEED_RED 1 +define NEED_ORANGE 1 +define NEED_YELLOW 1 + +-- Drop chances (percent) +define DROP_RED 45 +define DROP_ORANGE 30 +define DROP_YELLOW 15 + + +quest new_quest_lv7 begin state start begin - -- Function declaration + -- Function declaration function reward() local div = number(1,5) local reward = 5000 @@ -8,6 +25,7 @@ reward = math.floor(reward/div) return reward end + function reward_exp() local div = number(1,4) local reward_exp = 4000 @@ -16,35 +34,37 @@ return reward_exp end -- end function declaration + -- When level 7 target Octavio for new Quest------------------------------------------------------------- when login or levelup with pc.get_level() >= 7 begin - local v=find_npc_by_vnum(20008) - if 0==v then + local v = find_npc_by_vnum(20008) + if 0 == v then else target.vid("__TARGET__", v, gameforge.new_quest_lv7._010_target) end end - - when 20008.chat.gameforge.new_quest_lv7._020_say_title begin + + when 20008.chat.gameforge.new_quest_lv7._020_say_title with pc.get_level() >= 7 begin target.delete("__TARGET__") local empire = pc.get_empire() say_title(gameforge.new_quest_lv7._011_say_title) -- A Daughters Wedding say(gameforge.new_quest_lv7._021_say) -- Octavio has a daughter and she is in love with a guy for a village - if empire == 1 then -- = Shinsoo - say(gameforge.new_quest_lv7._022_say) -- The guy lives in a village in the Jayang area - end - if empire == 2 then -- = Chunjo - say(gameforge.new_quest_lv7._023_say) -- The guy lives in a village in the Bokjung area - end - if empire == 3 then -- = Jinno - say(gameforge.new_quest_lv7._024_say) -- The guy lives in a village in the Bakra area - end + if empire == 1 then -- = Shinsoo + say(gameforge.new_quest_lv7._022_say) -- The guy lives in a village in the Jayang area + end + if empire == 2 then -- = Chunjo + say(gameforge.new_quest_lv7._023_say) -- The guy lives in a village in the Bokjung area + end + if empire == 3 then -- = Jinno + say(gameforge.new_quest_lv7._024_say) -- The guy lives in a village in the Bakra area + end wait() -- next button say_title(gameforge.new_quest_lv7._011_say_title) -- A Daughters Wedding say(gameforge.new_quest_lv7._030_say) -- Octavio heared that she is going to marry him there say(gameforge.new_quest_lv7._031_say) -- Go to the Old Lady and ask her to help with the preperations local doquest = select(gameforge.subquest_06._40_select, gameforge.subquest_12._50_select, gameforge.new_quest_lv75._290_2_select) if doquest == 1 then + pc.setqf("soup", 0) -- hard reset flavour flag at quest start set_state(ask_oldwoman) -- Quest approved elseif doquest == 3 then -- abort permantenly say(gameforge.subquest_06._60_say) @@ -63,11 +83,12 @@ end end end + ---- ask altefrau what to do -------------------------------------------------------------------------------- state ask_oldwoman begin function get_old_woman_map() local empire = pc.get_empire() - if empire == 1 then + if empire == 1 then return 1 elseif empire == 2 then return 21 @@ -75,6 +96,7 @@ return 41 end end + function is_my_vil() if pc.get_map_index() == new_quest_lv7.get_old_woman_map() then return true @@ -84,71 +106,64 @@ end when enter or login begin - new_quest_lv7_AmountNeed1 = 1 - new_quest_lv7_AmountNeed2 = 1 - new_quest_lv7_AmountNeed3 = 1 new_quest_lv7_mob1 = 173 -- kill a 173#Hungriger Alpha-Wolf new_quest_lv7_mob2 = 174 -- kill a 174#Hungriger Blauwolf new_quest_lv7_mob3 = 175 -- kill a 175#Hungriger Alpha-Blauwolf - -- Einige deser Mobs werden auch in der Level 7 Aufgabe verwendet, was dazu führt, - -- dass diese dort nicht mehr hoch zählen wenn man sie tötet. - new_quest_lv7_drop1 = 30169 -- Blutrote Blume - new_quest_lv7_drop2 = 30170 -- Orangefarbene Blume - new_quest_lv7_drop3 = 30171 -- Duftende gelbe Blume + -- Einige deser Mobs werden auch in der Level 7 Aufgabe verwendet, was dazu führt, + -- dass diese dort nicht mehr hoch zählen wenn man sie tötet. + -- BEGIN EDIT added by Arne 18Sept09, according to Mantis 0026063, REASON: No quest letter, no questbook entry send_letter(gameforge.new_quest_lv7._020_say_title) -- A Daughters Wedding q.start() q.set_title(gameforge.new_quest_lv7._020_say_title) -- A Daughters Wedding -- END EDIT + if new_quest_lv7.is_my_vil() then - local v=find_npc_by_vnum(9006) -- Old Lady - if 0==v then + local v = find_npc_by_vnum(9006) -- Old Lady + if 0 == v then else target.vid("__TARGET2__", v, gameforge.new_quest_lv7._040_target ) -- Old Lady end end end - -- BEGIN EDIT added by Arne 18Sept09, according to Mantis 0026063, REASON: No questbook button + -- BEGIN EDIT added by Arne 18Sept09, according to Mantis 0026063, REASON: No questbook button when button or info begin say_title(gameforge.new_quest_lv7._020_say_title) -- A Daughters Wedding say(gameforge.new_quest_lv7._041_say) -- goto old lady and ask her to help with the preperations say("") - say(string.format(gameforge.new_quest_lv7._042_say, get_map_name_by_number(1))) -- where the old lady can be found + -- FIX: correct map name based on player's empire + say(string.format(gameforge.new_quest_lv7._042_say, get_map_name_by_number(new_quest_lv7.get_old_woman_map()))) -- where the old lady can be found end - --END EDIT + --END EDIT when 9006.chat.gameforge.new_quest_lv7._020_say_title begin target.delete("__TARGET2__") say_title(gameforge.new_quest_lv7._012_say_title) -- yellow text headline say(gameforge.new_quest_lv7._051_say) - wait() + wait() say_title(gameforge.new_quest_lv7._012_say_title) -- yellow text headline say(gameforge.new_quest_lv7._052_say) - -- "vom Bräutigam an seine Liebste überreicht" versteht das unsere Zielgruppe? - wait() + -- "vom Bräutigam an seine Liebste überreicht" versteht das unsere Zielgruppe? + wait() say(gameforge.new_quest_lv7._054_say) - say_reward(string.format("%s x", new_quest_lv7_AmountNeed1)) - say_item_vnum(new_quest_lv7_drop1) -- icon of item + say_reward(string.format("%s x", NEED_RED)) + say_item_vnum(ITEM_FLOWER_RED) -- icon of item say_reward(gameforge.new_quest_lv7._055_say) say(mob_name(new_quest_lv7_mob1)) - wait() + wait() say(gameforge.new_quest_lv7._056_say) - say_reward(string.format("%s x", new_quest_lv7_AmountNeed2)) - say_item_vnum(new_quest_lv7_drop2) -- icon of item + say_reward(string.format("%s x", NEED_ORANGE)) + say_item_vnum(ITEM_FLOWER_ORANGE) -- icon of item say_reward(gameforge.new_quest_lv7._055_say) say(mob_name(new_quest_lv7_mob2)) - wait() + wait() say(gameforge.new_quest_lv7._056_say) - say_reward(string.format("%s x", new_quest_lv7_AmountNeed3)) - say_item_vnum(new_quest_lv7_drop3) -- icon of item + say_reward(string.format("%s x", NEED_YELLOW)) + say_item_vnum(ITEM_FLOWER_YELLOW) -- icon of item say_reward(gameforge.new_quest_lv7._055_say ) say(mob_name(new_quest_lv7_mob3)) - --set flags: - pc.setqf("collect_count_1",0) --Current number of items - pc.setqf("collect_count_2",0) --Current number of items - pc.setqf("collect_count_3",0) --Current number of items - wait() + wait() say_title(gameforge.new_quest_lv7._012_say_title) say(gameforge.new_quest_lv7._060_say) -- Wo ist die Schwester? @@ -156,23 +171,21 @@ set_state(collect_flowers) end end + ----- collect flowers ------------------------------------------------------------------------------------------------- state collect_flowers begin -- BEGIN EDIT added by Arne 18Sept09, according to Mantis 0026063, REASON: No letter, questbook entry, button when enter or login begin - new_quest_lv7_AmountNeed1 = 1 - new_quest_lv7_AmountNeed2 = 1 - new_quest_lv7_AmountNeed3 = 1 - new_quest_lv7_dropProb1 = 45 - new_quest_lv7_dropProb2 = 30 - new_quest_lv7_dropProb3 = 15 - new_quest_lv7_drop1 = 30169 -- Blutrote Blume - new_quest_lv7_drop2 = 30170 -- Orangefarbene Blume - new_quest_lv7_drop3 = 30171 -- Duftende gelbe Blume send_letter(gameforge.new_quest_lv7._020_say_title) q.start() q.set_title(gameforge.new_quest_lv7._020_say_title) - + + -- FIX: if the player already has all flowers, go directly to return_oldwoman + if pc.count_item(ITEM_FLOWER_RED) >= NEED_RED and pc.count_item(ITEM_FLOWER_ORANGE) >= NEED_ORANGE and pc.count_item(ITEM_FLOWER_YELLOW) >= NEED_YELLOW then + q.done() + set_state(return_oldwoman) + return + end end --END EDIT @@ -181,40 +194,48 @@ -- itemicon vnum of flower used for icon function when_one_killed(neededAmount, dropProb, itemIcon) if pc.count_item(itemIcon) < neededAmount then - local drop=math.random(1,100) + local drop = number(1,100) if drop <= dropProb then -- probability if s.th. drops pc.give_item2(itemIcon) -- icon of item by vnum - Blutrote Blume -- EDIT Arne 18Sept09 moved q.done Reason: removed quest from book -- BEGIN EDIT added by Arne 18Sept09, according to Mantis 0026063, REASON: No arrow on old lady for flower return - notice_multiline(gameforge.new_quest_lv7._088_notice, notice) - if (pc.count_item(new_quest_lv7_drop3) == new_quest_lv7_AmountNeed3 and pc.count_item(new_quest_lv7_drop2) == new_quest_lv7_AmountNeed2 and pc.count_item(new_quest_lv7_drop1) == new_quest_lv7_AmountNeed1) then - return true - end + --notice_multiline(gameforge.new_quest_lv7._088_notice, notice) + if pc.count_item(ITEM_FLOWER_YELLOW) == NEED_YELLOW and pc.count_item(ITEM_FLOWER_ORANGE) == NEED_ORANGE and pc.count_item(ITEM_FLOWER_RED) == NEED_RED then + return true + end else - notice_multiline(gameforge.new_quest_lv7._082_say, notice) - end + --notice_multiline(gameforge.new_quest_lv7._082_say, notice) + end + end + + -- FIX: also check completion when there is no drop or flowers came from trade + if pc.count_item(ITEM_FLOWER_YELLOW) >= NEED_YELLOW and pc.count_item(ITEM_FLOWER_ORANGE) >= NEED_ORANGE and pc.count_item(ITEM_FLOWER_RED) >= NEED_RED then + return true end end + -------------- Blutrote Blume ------------------------------------------------------ -- kill a 173#Hungriger Alpha-Wolf when 173.kill begin - if new_quest_lv7.when_one_killed(new_quest_lv7_AmountNeed1, new_quest_lv7_dropProb1, new_quest_lv7_drop1) then + if new_quest_lv7.when_one_killed(NEED_RED, DROP_RED, ITEM_FLOWER_RED) then q.done() set_state(return_oldwoman) end end + -------------- Orangefarbene Blume ------------------------------------------------------ -- kill a 174#Hungriger Blauwolf when 174.kill begin - if new_quest_lv7.when_one_killed(new_quest_lv7_AmountNeed2, new_quest_lv7_dropProb2, new_quest_lv7_drop2) then + if new_quest_lv7.when_one_killed(NEED_ORANGE, DROP_ORANGE, ITEM_FLOWER_ORANGE) then q.done() set_state(return_oldwoman) - end + end end + -------------- Duftende gelbe Blume ------------------------------------------------------ -- kill a 175#Hungriger Alpha-Blauwolf when 175.kill begin - if new_quest_lv7.when_one_killed(new_quest_lv7_AmountNeed3, new_quest_lv7_dropProb3, new_quest_lv7_drop3) then + if new_quest_lv7.when_one_killed(NEED_YELLOW, DROP_YELLOW, ITEM_FLOWER_YELLOW) then q.done() set_state(return_oldwoman) end @@ -225,38 +246,28 @@ when button or info begin say_title(gameforge.new_quest_lv7._020_say_title) say(gameforge.new_quest_lv7._092_say) -- collect flowers for the Bouquet - if pc.count_item(new_quest_lv7_drop1) < new_quest_lv7_AmountNeed1 then - say_reward(string.format(gameforge.new_quest_lv7._085_1_say_reward, new_quest_lv7_AmountNeed1 - - pc.count_item(new_quest_lv7_drop1))) -- number of red flowers missing + if pc.count_item(ITEM_FLOWER_RED) < NEED_RED then + say_reward(string.format(gameforge.new_quest_lv7._085_1_say_reward, NEED_RED - pc.count_item(ITEM_FLOWER_RED))) -- number of red flowers missing end - if pc.count_item(new_quest_lv7_drop2) < new_quest_lv7_AmountNeed2 then - say_reward(string.format(gameforge.new_quest_lv7._085_2_say_reward, new_quest_lv7_AmountNeed2 - - pc.count_item(new_quest_lv7_drop2))) -- number of orange flowers missing + if pc.count_item(ITEM_FLOWER_ORANGE) < NEED_ORANGE then + say_reward(string.format(gameforge.new_quest_lv7._085_2_say_reward, NEED_ORANGE - pc.count_item(ITEM_FLOWER_ORANGE))) -- number of orange flowers missing end - if pc.count_item(new_quest_lv7_drop3) < new_quest_lv7_AmountNeed3 then - say_reward(string.format(gameforge.new_quest_lv7._085_3_say_reward, new_quest_lv7_AmountNeed3 - - pc.count_item(new_quest_lv7_drop3))) -- number of yellow flowers missing + if pc.count_item(ITEM_FLOWER_YELLOW) < NEED_YELLOW then + say_reward(string.format(gameforge.new_quest_lv7._085_3_say_reward, NEED_YELLOW - pc.count_item(ITEM_FLOWER_YELLOW))) -- number of yellow flowers missing end end end state return_oldwoman begin -- BEGIN EDIT added by Arne 18Sept09, according to Mantis 0026063, state needed to set up quest - when enter or login begin - new_quest_lv7_AmountNeed1 = 1 - new_quest_lv7_AmountNeed2 = 1 - new_quest_lv7_AmountNeed3 = 1 - new_quest_lv7_drop1 = 30169 -- Blutrote Blume - new_quest_lv7_drop2 = 30170 -- Orangefarbene Blume - new_quest_lv7_drop3 = 30171 -- Duftende gelbe Blume - local v=find_npc_by_vnum(9006) + local v = find_npc_by_vnum(9006) send_letter(gameforge.new_quest_lv7._020_say_title) q.start() q.set_title(gameforge.new_quest_lv7._020_say_title) - if 0==v then - else - target.vid("__TARGET6__", v, gameforge.new_quest_lv7._040_target) + if 0 == v then + else + target.vid("__TARGET6__", v, gameforge.new_quest_lv7._040_target) end end @@ -264,26 +275,28 @@ say_title(gameforge.new_quest_lv7._020_say_title) say(gameforge.new_quest_lv7._091_say) -- success return to old lady say("") - say(string.format(gameforge.new_quest_lv7._042_say, get_map_name_by_number(1))) + -- FIX: correct map name (same logic as in ask_oldwoman) + say(string.format(gameforge.new_quest_lv7._042_say, get_map_name_by_number(new_quest_lv7.get_old_woman_map()))) end - --END EDIT + --END EDIT -------------- try to give old woman the flowers --------------------- when 9006.chat.gameforge.new_quest_lv7._020_say_title begin target.delete("__TARGET6__") say_title(gameforge.new_quest_lv7._012_say_title) - if (pc.count_item(new_quest_lv7_drop1) < new_quest_lv7_AmountNeed1 or pc.count_item(new_quest_lv7_drop2) < new_quest_lv7_AmountNeed2 or pc.count_item(new_quest_lv7_drop3) < new_quest_lv7_AmountNeed3) then + if pc.count_item(ITEM_FLOWER_RED) < NEED_RED or pc.count_item(ITEM_FLOWER_ORANGE) < NEED_ORANGE or pc.count_item(ITEM_FLOWER_YELLOW) < NEED_YELLOW then say(gameforge.new_quest_lv7._110_say) - say_reward(string.format(gameforge.new_quest_lv7._085_say_reward, new_quest_lv7_AmountNeed1 - pc.count_item(new_quest_lv7_drop1))) - say_reward(string.format(gameforge.new_quest_lv7._086_say_reward, new_quest_lv7_AmountNeed2 - pc.count_item(new_quest_lv7_drop2))) - say_reward(string.format(gameforge.new_quest_lv7._087_say_reward, new_quest_lv7_AmountNeed3 - pc.count_item(new_quest_lv7_drop3))) + -- FIX: avoid negative numbers if player has more flowers than needed + say_reward(string.format(gameforge.new_quest_lv7._085_say_reward, math.max(0, NEED_RED - pc.count_item(ITEM_FLOWER_RED)))) + say_reward(string.format(gameforge.new_quest_lv7._086_say_reward, math.max(0, NEED_ORANGE - pc.count_item(ITEM_FLOWER_ORANGE)))) + say_reward(string.format(gameforge.new_quest_lv7._087_say_reward, math.max(0, NEED_YELLOW - pc.count_item(ITEM_FLOWER_YELLOW)))) say(gameforge.new_quest_lv7._081_say) set_state(collect_flowers) else - pc.remove_item(30169, 1) - pc.remove_item(30170, 1) - pc.remove_item(30171, 1) - pc.give_item2(30172) -- flowers + pc.remove_item(ITEM_FLOWER_RED, NEED_RED) + pc.remove_item(ITEM_FLOWER_ORANGE, NEED_ORANGE) + pc.remove_item(ITEM_FLOWER_YELLOW, NEED_YELLOW) + pc.give_item2(ITEM_BOUQUET) -- flowers -- game.drop_item(30169, 1) say(gameforge.new_quest_lv7._115_say) -- hier fehlt info wie man in das reich kommt @@ -302,6 +315,7 @@ end end end + --- go to twin sister of old woman in other kingdom--------------------------------------------------------------------------------------------------- state find_empire begin when login or enter begin @@ -310,34 +324,36 @@ q.start() q.set_title(gameforge.new_quest_lv7._020_say_title) -- END EDIT + new_quest_lv7_DestMapIndex = 99 if pc.get_empire() == 1 then -- = Shinsoo new_quest_lv7_DestMapIndex = 3 -- = Yayang - local v=find_npc_by_vnum(10001) - if 0==v then + local v = find_npc_by_vnum(10001) + if 0 == v then else target.vid("__TARGET7__", v, gameforge.map_warp._190_select) end elseif pc.get_empire() == 2 then -- = Chunjo new_quest_lv7_DestMapIndex = 23 -- = Bokjung - local v=find_npc_by_vnum(10003) - if 0==v then + local v = find_npc_by_vnum(10003) + if 0 == v then else target.vid("__TARGET7__", v, gameforge.map_warp._210_select) end elseif pc.get_empire() == 3 then -- = Jinno new_quest_lv7_DestMapIndex = 43 -- = Bakra - local v=find_npc_by_vnum(10005) - if 0==v then + local v = find_npc_by_vnum(10005) + if 0 == v then else target.vid("__TARGET7__", v, gameforge.map_warp._230_select) end end + if pc.get_map_index() == new_quest_lv7_DestMapIndex then target.delete("__TARGET7__") - notice_multiline(gameforge.new_quest_lv7._125_notice, notice) - local v=find_npc_by_vnum(9006) - if 0==v then + --notice_multiline(gameforge.new_quest_lv7._125_notice, notice) + local v = find_npc_by_vnum(9006) + if 0 == v then else target.vid("__TARGET3__", v, gameforge.subquest_48._230_targetVid) end @@ -346,7 +362,6 @@ end when button or info begin - say_title(gameforge.new_quest_lv7._020_say_title) say(gameforge.new_quest_lv7._131_say) if new_quest_lv7_DestMapIndex == 3 then @@ -358,25 +373,36 @@ end end end + ------ find the sister of the old woman in a different empire ------------------------------------------------------------------------------------------------------ state goto_oldwomans_sister begin when enter or login begin send_letter(gameforge.new_quest_lv7._020_say_title) q.start() q.set_title(gameforge.new_quest_lv7._020_say_title) + + -- FIX: recompute destination map index to ensure correct map for the sister + new_quest_lv7_DestMapIndex = 99 + if pc.get_empire() == 1 then -- = Shinsoo + new_quest_lv7_DestMapIndex = 3 -- = Yayang + elseif pc.get_empire() == 2 then -- = Chunjo + new_quest_lv7_DestMapIndex = 23 -- = Bokjung + elseif pc.get_empire() == 3 then -- = Jinno + new_quest_lv7_DestMapIndex = 43 -- = Bakra + end end - when 9006.chat.gameforge.new_quest_lv7._020_say_title begin - if pc.count_item(30172) >= 1 then -- has flowers in inventory + when 9006.chat.gameforge.new_quest_lv7._020_say_title with pc.get_map_index() == new_quest_lv7_DestMapIndex begin + if pc.count_item(ITEM_BOUQUET) >= 1 then -- has flowers in inventory target.delete("__TARGET3__") say_title(gameforge.new_quest_lv7._020_say_title) -- yellow - pc.remove_item(30172, pc.count_item(30172)) + pc.remove_item(ITEM_BOUQUET, pc.count_item(ITEM_BOUQUET)) say_title(pc.get_name()) - say(gameforge.new_quest_lv7._140_say) - say_title(gameforge.new_quest_lv7._012_say_title) + say(gameforge.new_quest_lv7._140_say) + say_title(gameforge.new_quest_lv7._012_say_title) say(gameforge.new_quest_lv7._141_say) wait() - say_title(gameforge.new_quest_lv7._012_say_title) + say_title(gameforge.new_quest_lv7._012_say_title) say(gameforge.new_quest_lv7._142_say) q.done() set_state(find_way_home) @@ -389,11 +415,13 @@ set_state(ask_oldwoman) end end + when button or info begin q.set_title(gameforge.new_quest_lv7._020_say_title) say(gameforge.new_quest_lv7._145_say) end end + ------ return to first village ------------------------------------------------------------------------------------------------------ state find_way_home begin when login or enter begin @@ -405,31 +433,31 @@ new_quest_lv7_HomeMapIndex = 99 if pc.get_empire() == 1 then -- = Shinsoo new_quest_lv7_HomeMapIndex = 1 -- = Youngan - local v=find_npc_by_vnum(10002) - if 0==v then + local v = find_npc_by_vnum(10002) + if 0 == v then else target.vid("__TARGET7__", v, gameforge.map_warp._180_select) end elseif pc.get_empire() == 2 then -- = Chunjo new_quest_lv7_HomeMapIndex = 21 -- = Joan - local v=find_npc_by_vnum(10004) - if 0==v then + local v = find_npc_by_vnum(10004) + if 0 == v then else target.vid("__TARGET7__", v, gameforge.map_warp._200_select) end elseif pc.get_empire() == 3 then -- = Jinno new_quest_lv7_HomeMapIndex = 41 -- = Pyungmoo - local v=find_npc_by_vnum(10006) - if 0==v then + local v = find_npc_by_vnum(10006) + if 0 == v then else target.vid("__TARGET7__", v, gameforge.map_warp._220_select) end end if pc.get_map_index() == new_quest_lv7_HomeMapIndex then target.delete("__TARGET7__") - notice_multiline(gameforge.new_quest_lv7._129_say, notice) - local v=find_npc_by_vnum(20008) - if 0==v then + --notice_multiline(gameforge.new_quest_lv7._129_say, notice) + local v = find_npc_by_vnum(20008) + if 0 == v then else target.vid("__TARGET5__", v, gameforge.subquest_48._230_targetVid) end @@ -450,14 +478,14 @@ say(gameforge.new_quest_lv7._137_say) end end - end + ------ invite ocatvio to the wedding ------------------------------------------------------------------------------------------------------ state back_to_octavio begin when enter or login begin -- BEGIN EDIT added by Arne 18Sept09, according to Mantis 0026063, REASON: no quest, no letter - local v=find_npc_by_vnum(20008) - if 0==v then + local v = find_npc_by_vnum(20008) + if 0 == v then else target.vid("__TARGET5__", v, gameforge.new_quest_lv7._010_target) end @@ -466,7 +494,13 @@ q.start() q.set_title(gameforge.new_quest_lv7._020_say_title) -- END EDIT - soup = false + + -- FIX: keep soup flag persistent via quest flag + if pc.getqf("soup") == 1 then + soup = true + else + soup = false + end end when button or info begin @@ -474,7 +508,6 @@ say(gameforge.new_quest_lv7._129_say) end - when 20008.chat.gameforge.new_quest_lv7._020_say_title begin target.delete("__TARGET5__") say_title(gameforge.new_quest_lv7._020_say_title) @@ -486,108 +519,115 @@ say(gameforge.new_quest_lv7._152_say) -- random reward - local reward=new_quest_lv7.reward() - local reward_exp=new_quest_lv7.reward_exp() + local reward = new_quest_lv7.reward() + local reward_exp = new_quest_lv7.reward_exp() - say_reward(string.format(gameforge.new_quest_lv7._154_say_reward,reward_exp)) - say_reward(string.format(gameforge.new_quest_lv7._155_say_reward,reward)) + say_reward(string.format(gameforge.new_quest_lv7._154_say_reward, reward_exp)) + say_reward(string.format(gameforge.new_quest_lv7._155_say_reward, reward)) - pc.give_exp2(new_quest_lv7.reward_exp()) - pc.change_money(new_quest_lv7.reward()) + -- FIX: use the same values for the actual reward + pc.give_exp2(reward_exp) + pc.change_money(reward) - local reward_item="0" - if pc.job==0 then - local r=number(1,10) - if r==1 then - reward_item="00013" - elseif r==2 then - reward_item="00023" - elseif r==3 then - reward_item="00033" - elseif r==4 then - reward_item="00043" - elseif r==5 then - reward_item="00053" - elseif r==6 then - reward_item="03003" - elseif r==7 then - reward_item="03013" - elseif r==8 then - reward_item="03023" - elseif r==9 then - reward_item="03033" - elseif r==10 then - reward_item="03043" + pc.setqf("soup", 0) -- reset flavour flag after success + + local reward_item = "0" + local job = pc.get_job() + if job == 0 then + local r = number(1,10) + if r == 1 then + reward_item = "00013" + elseif r == 2 then + reward_item = "00023" + elseif r == 3 then + reward_item = "00033" + elseif r == 4 then + reward_item = "00043" + elseif r == 5 then + reward_item = "00053" + elseif r == 6 then + reward_item = "03003" + elseif r == 7 then + reward_item = "03013" + elseif r == 8 then + reward_item = "03023" + elseif r == 9 then + reward_item = "03033" + elseif r == 10 then + reward_item = "03043" end - elseif pc.job==1 then - local r=number(1,10) - if r==1 then - reward_item="01003" - elseif r==2 then - reward_item="04003" - elseif r==3 then - reward_item="01013" - elseif r==4 then - reward_item="04013" - elseif r==5 then - reward_item="01023" - elseif r==6 then - reward_item="02003" - elseif r==7 then - reward_item="02013" - elseif r==8 then - reward_item="02023" - elseif r==9 then - reward_item="02033" - elseif r==10 then - reward_item="2043" + elseif job == 1 then + local r = number(1,10) + if r == 1 then + reward_item = "01003" + elseif r == 2 then + reward_item = "04003" + elseif r == 3 then + reward_item = "01013" + elseif r == 4 then + reward_item = "04013" + elseif r == 5 then + reward_item = "01023" + elseif r == 6 then + reward_item = "02003" + elseif r == 7 then + reward_item = "02013" + elseif r == 8 then + reward_item = "02023" + elseif r == 9 then + reward_item = "02033" + elseif r == 10 then + reward_item = "02043" end - elseif pc.job==2 then - local r=number(1, 6) - if r==1 then - reward_item="00013" - elseif r==2 then - reward_item="00023" - elseif r==3 then - reward_item="00033" - elseif r==4 then - reward_item="00043" - elseif r==5 then - reward_item="00053" - elseif r==6 then - reward_item="00053" + elseif job == 2 then + local r = number(1, 6) + if r == 1 then + reward_item = "00013" + elseif r == 2 then + reward_item = "00023" + elseif r == 3 then + reward_item = "00033" + elseif r == 4 then + reward_item = "00043" + elseif r == 5 then + reward_item = "00053" + elseif r == 6 then + reward_item = "00053" end - elseif pc.job==3 then - local r=number(1, 8) - if r==1 then - reward_item="05003" - elseif r==2 then - reward_item="05013" - elseif r==3 then - reward_item="05023" - elseif r==4 then - reward_item="07003" - elseif r==5 then - reward_item="07013" - elseif r==6 then - reward_item="07023" - elseif r==7 then - reward_item="07033" - elseif r==8 then - reward_item="07043" + elseif job == 3 then + local r = number(1, 8) + if r == 1 then + reward_item = "05003" + elseif r == 2 then + reward_item = "05013" + elseif r == 3 then + reward_item = "05023" + elseif r == 4 then + reward_item = "07003" + elseif r == 5 then + reward_item = "07013" + elseif r == 6 then + reward_item = "07023" + elseif r == 7 then + reward_item = "07033" + elseif r == 8 then + reward_item = "07043" end end + if reward_item != "0" then wait() say_reward(gameforge.new_quest_lv7._153_say_reward) say_item_vnum(reward_item) pc.give_item2(reward_item,1) end + q.done() set_state(__COMPLETE__) else say(gameforge.new_quest_lv7._160_say) say(gameforge.new_quest_lv7._165_say) soup = true + pc.setqf("soup", 1) -- FIX: remember that player talked to the wrong Octavio end end end @@ -598,10 +638,11 @@ return end end + ------ complete ------------------------------------------------------------------------------------------------------ state __COMPLETE__ begin when button or info begin return end end -end \ No newline at end of file +end diff --git a/share/locale/english/quest/pre_qc.py b/share/locale/english/quest/pre_qc.py index 256bfa9..f1255c9 100644 --- a/share/locale/english/quest/pre_qc.py +++ b/share/locale/english/quest/pre_qc.py @@ -104,7 +104,7 @@ def Replace(lines, parameter_table, keys): else: tokens = my_split_with_seps( s, - ["\t", ",", " ", "=", "[", "]", "-", "<", ">", "~", "!", ".", "(", ")"], + ["\t", ",", " ", "=", "[", "]", "-", "<", ">", "~", "!", ".", "(", ")", "\r", "\n"], ) for key in keys: try: diff --git a/share/locale/english/quest/skill_group.quest b/share/locale/english/quest/skill_group.quest index 491fef7..a115152 100644 --- a/share/locale/english/quest/skill_group.quest +++ b/share/locale/english/quest/skill_group.quest @@ -65,7 +65,7 @@ quest skill_group begin say(gameforge.skill_group._170_sayReward) end - select(gameforge.locale.confirm) + select(gameforge.locale.confirm) setskin(NOWINDOW) end @@ -86,15 +86,14 @@ quest skill_group begin elseif pc_job==3 then say_reward(gameforge.skill_group._240_sayReward) end - return + return end say_title(gameforge.skill_group._250_sayTitle) say(gameforge.skill_group._260_say) say_reward(gameforge.skill_group._270_sayReward) - - local s= select(gameforge.skill_group._280_select, gameforge.skill_group._290_select) + local s= select(gameforge.skill_group._280_select, gameforge.skill_group._290_select) if 2 == s then return @@ -108,7 +107,7 @@ quest skill_group begin set_state("start") pc.set_skill_group(1) -- !!! pc.clear_skill() - char_log(0, "CLEAR_SKILL", "Fertigkeit nach Lehrer löschen") + char_log(0, "CLEAR_SKILL", "Fertigkeit nach Fertigkeitsmeister löschen") say_title(gameforge.skill_group._310_sayTitle) @@ -127,27 +126,27 @@ quest skill_group begin target.delete("teacher2") local pc_job=pc.get_job() - if pc_job != 0 then - say_title(gameforge.skill_group._370_sayTitle) + if pc_job != 0 then -- !!! + say_title(gameforge.skill_group._190_sayTitle) say(gameforge.skill_group._380_say) if pc_job==0 then say_reward(gameforge.skill_group._210_sayReward) elseif pc_job==1 then - say_reward(gameforge.skill_group._390_sayReward) + say_reward(gameforge.skill_group._220_sayReward) elseif pc_job==2 then say_reward(gameforge.skill_group._230_sayReward) elseif pc_job==3 then say_reward(gameforge.skill_group._240_sayReward) end - return + return end say_title(gameforge.skill_group._400_sayTitle) say(gameforge.skill_group._410_say) say_reward(gameforge.skill_group._270_sayReward) - local s= select(gameforge.skill_group._280_select, gameforge.skill_group._290_select) + local s= select(gameforge.skill_group._280_select, gameforge.skill_group._290_select) if 2 == s then return @@ -161,8 +160,7 @@ quest skill_group begin set_state("start") pc.set_skill_group(2) pc.clear_skill() - char_log(0, "CLEAR_SKILL", "Fertigkeit nach Fertigkeitsmeister löschen") - + char_log(0, "CLEAR_SKILL", "Fertigkeit nach Fertigkeitsmeister löschen") say_title(gameforge.skill_group._420_sayTitle) @@ -181,7 +179,6 @@ quest skill_group begin when teacher3.target.click or skill_group1_3.chat.gameforge.skill_group._430_npcChat or skill_group2_3.chat.gameforge.skill_group._430_npcChat or skill_group3_3.chat.gameforge.skill_group._430_npcChat begin target.delete("teacher3") - local pc_job=pc.get_job() if pc_job != 1 then -- !!! say_title(gameforge.skill_group._190_sayTitle) @@ -196,13 +193,13 @@ quest skill_group begin elseif pc_job==3 then say_reward(gameforge.skill_group._240_sayReward) end - return + return end say_title(gameforge.skill_group._450_sayTitle) say(gameforge.skill_group._460_say) say_reward(gameforge.skill_group._470_sayReward) - local s= select(gameforge.skill_group._280_select, gameforge.skill_group._290_select) + local s= select(gameforge.skill_group._280_select, gameforge.skill_group._290_select) if 2 == s then return @@ -216,13 +213,13 @@ quest skill_group begin set_state("start") pc.set_skill_group(1) -- !!! pc.clear_skill() - char_log(0, "CLEAR_SKILL", "Fertigkeit nach Fertigkeitsmeister löschen") + char_log(0, "CLEAR_SKILL", "Fertigkeit nach Fertigkeitsmeister löschen") say_title(gameforge.skill_group._480_sayTitle) say(gameforge.skill_group._320_say) if not pc.is_clear_skill_group() then - say(gameforge.skill_group._490_say) + say(gameforge.skill_group._330_say) say_title(gameforge.buy_fishrod._210_sayTitle) say_reward(gameforge.skill_group._340_sayReward) else @@ -249,7 +246,7 @@ quest skill_group begin elseif pc_job==3 then say_reward(gameforge.skill_group._240_sayReward) end - return + return end say_title(gameforge.skill_group._520_sayTitle) @@ -268,7 +265,7 @@ quest skill_group begin set_state("start") pc.set_skill_group(2) -- !!! pc.clear_skill() - char_log(0, "CLEAR_SKILL", "Fertigkeit nach Fertigkeitsmeister löschen") + char_log(0, "CLEAR_SKILL", "Fertigkeit nach Fertigkeitsmeister löschen") say_title(gameforge.skill_group._540_sayTitle) @@ -289,7 +286,7 @@ quest skill_group begin local pc_job=pc.get_job() if pc_job != 2 then -- !!! - say_title(gameforge.skill_group._370_sayTitle) + say_title(gameforge.skill_group._190_sayTitle) say(gameforge.skill_group._560_say) if pc_job==0 then @@ -320,20 +317,18 @@ quest skill_group begin set_state("start") pc.set_skill_group(1) -- !!! pc.clear_skill() - char_log(0, "CLEAR_SKILL", "Fertigkeit nach Fertigkeitsmeister löschen") - + char_log(0, "CLEAR_SKILL", "Fertigkeit nach Fertigkeitsmeister löschen") say_title(gameforge.skill_group._600_sayTitle) say(gameforge.skill_group._320_say) if not pc.is_clear_skill_group() then - --- l say(gameforge.skill_group._330_say) say_title(gameforge.buy_fishrod._210_sayTitle) - say_reward(gameforge.skill_group._340_sayReward) - else + say_reward(gameforge.skill_group._340_sayReward) + else say_reward(gameforge.skill_group._350_sayReward) - end + end clear_letter() end @@ -355,14 +350,14 @@ quest skill_group begin elseif pc_job==3 then say_reward(gameforge.skill_group._240_sayReward) end - return + return end say_title(gameforge.skill_group._630_sayTitle) say(gameforge.skill_group._640_say) say_reward(gameforge.skill_group._590_sayReward) - local s= select(gameforge.skill_group._280_select, gameforge.skill_group._290_select) + local s= select(gameforge.skill_group._280_select, gameforge.skill_group._290_select) if 2 == s then return @@ -376,19 +371,18 @@ quest skill_group begin set_state("start") pc.set_skill_group(2) -- !!! pc.clear_skill() - char_log(0, "CLEAR_SKILL", "Fertigkeit nach Fertigkeitsmeister löschen") + char_log(0, "CLEAR_SKILL", "Fertigkeit nach Fertigkeitsmeister löschen") say_title(gameforge.skill_group._650_sayTitle) say(gameforge.skill_group._320_say) if not pc.is_clear_skill_group() then - --- l say(gameforge.skill_group._330_say) say_title(gameforge.buy_fishrod._210_sayTitle) - say_reward(gameforge.skill_group._340_sayReward) - else + say_reward(gameforge.skill_group._340_sayReward) + else say_reward(gameforge.skill_group._350_sayReward) - end + end clear_letter() end @@ -410,40 +404,39 @@ quest skill_group begin elseif pc_job==3 then say_reward(gameforge.skill_group._240_sayReward) end - return + return end say_title(gameforge.skill_group._680_sayTitle) say(gameforge.skill_group._690_say) say_reward(gameforge.skill_group._700_sayReward) - local s= select(gameforge.skill_group._280_select, gameforge.skill_group._290_select) + local s= select(gameforge.skill_group._280_select, gameforge.skill_group._290_select) if 2 == s then return end if pc.get_job()!=3 or pc.get_skill_group()!=0 then - test_chat(string.format(gameforge.skill_group._300_chat, bool_to_str(npc_is_same_job()).." pc.get_skill_group:"..pc.get_skill_group().."pc_job:"..pc.get_job())) + test_chat(string.format(gameforge.skill_group._300_chat, bool_to_str(npc_is_same_job()).."pc.get_skill_group:"..pc.get_skill_group().."pc_job:"..pc.get_job())) return end set_state("start") pc.set_skill_group(1) -- !!! pc.clear_skill() - char_log(0, "CLEAR_SKILL", "Fertigkeit nach Fertigkeitsmeister löschen") + char_log(0, "CLEAR_SKILL", "Fertigkeit nach Fertigkeitsmeister löschen") say_title(gameforge.skill_group._710_sayTitle) say(gameforge.skill_group._320_say) if not pc.is_clear_skill_group() then - --- l say(gameforge.skill_group._330_say) say_title(gameforge.buy_fishrod._210_sayTitle) - say_reward(gameforge.skill_group._340_sayReward) - else + say_reward(gameforge.skill_group._340_sayReward) + else say_reward(gameforge.skill_group._350_sayReward) - end + end clear_letter() end @@ -468,7 +461,6 @@ quest skill_group begin return end - say_title(gameforge.skill_group._740_sayTitle) say(gameforge.skill_group._750_say) say_reward(gameforge.skill_group._700_sayReward) @@ -485,21 +477,20 @@ quest skill_group begin set_state("start") pc.set_skill_group(2) -- !!! pc.clear_skill() - char_log(0, "CLEAR_SKILL", "Fertigkeit nach Fertigkeitsmeister löschen") + char_log(0, "CLEAR_SKILL", "Fertigkeit nach Fertigkeitsmeister löschen") say_title(gameforge.skill_group._760_sayTitle) say(gameforge.skill_group._320_say) if not pc.is_clear_skill_group() then - --- l say(gameforge.skill_group._330_say) say_title(gameforge.buy_fishrod._210_sayTitle) - say_reward(gameforge.skill_group._340_sayReward) - else + say_reward(gameforge.skill_group._340_sayReward) + else say_reward(gameforge.skill_group._350_sayReward) - end + end clear_letter() end end -- end_of_state: run -end -- end_of_quest +end -- end_of_quest \ No newline at end of file diff --git a/share/locale/english/quest/subquest_06.quest b/share/locale/english/quest/subquest_06.quest index c95b80e..3609608 100644 --- a/share/locale/english/quest/subquest_06.quest +++ b/share/locale/english/quest/subquest_06.quest @@ -129,7 +129,7 @@ quest subquest_6 begin target.delete("__TARGET2__") if pc.count_item(30132) >= 1 then pc.setqf("ironore_done", 1) - pc.setqf("asked_20011", 1) + pc.setqf("asked_20011", 0) pc.remove_item("30132", 1) say_title(gameforge.main_quest_lv30._40_sayTitle) diff --git a/share/locale/english/translate.lua b/share/locale/english/translate.lua index 9cfa573..cc0a401 100644 --- a/share/locale/english/translate.lua +++ b/share/locale/english/translate.lua @@ -7500,11 +7500,11 @@ gameforge.subquest_06._226_sayReward = "Yonah has given you the Coal. " gameforge.subquest_06._230_targetVid = "Go to Octavio " gameforge.subquest_06._240_targetVid = "Go to Uriel. " gameforge.subquest_06._250_targetVid = "Go to Yonah. " -gameforge.subquest_06._260_npcChat = "Ich brauche Eisenerz " +gameforge.subquest_06._260_npcChat = "I need Iron Ore " gameforge.subquest_06._270_say = "Thank you for bringing me my book back! Now I can[ENTER]continue my research. Here, take some Iron Ore.[ENTER]Use it well. " gameforge.subquest_06._280_say = "You need Iron Ore? I can give you some. But I do[ENTER]have a favour to ask you: I recently lost a book[ENTER]while I was being chased by a pack of Wild Dogs.[ENTER]I think those Wild Dogs must have my book. Bring[ENTER]it back to me and then I'll give you some Iron[ENTER]Ore. " gameforge.subquest_06._285_say = "Uriel will give you Iron Ore if you get his book[ENTER]back from the Wild Dogs. " -gameforge.subquest_06._290_npcChat = "Ich brauche Eisenerz " +gameforge.subquest_06._290_npcChat = "I need Iron Ore " gameforge.subquest_06._300_say = "More Iron Ore? I've already given you some. Now I[ENTER]don't have any left. " gameforge.subquest_06._30_say = "Could you help me? Thank you for doing my[ENTER]daughter a favour. I need to ask you for a favour[ENTER]now. I have asked the village Blacksmith to[ENTER]produce some armour, but I haven't heard anything[ENTER]from him. Could you find out how he's getting on[ENTER]with it? " gameforge.subquest_06._310_npcChat = "I need Leather. " @@ -7691,7 +7691,7 @@ gameforge.subquest_13._100_targetVid = "Go to Ariyoung " gameforge.subquest_13._10_targetVid = "Materials for making weapons. " gameforge.subquest_13._110_targetVid = "Go to Ah-Yu. " gameforge.subquest_13._120_sayReward = "The Weapon Shop Dealer needs your help. Get Iron[ENTER]Ore from Uriel and Linen from Ariyoung for him. " -gameforge.subquest_13._130_npcChat = "Ich brauche Eisenerz " +gameforge.subquest_13._130_npcChat = "I need Iron Ore " gameforge.subquest_13._140_say = "You need Iron Ore? I could give you some if you[ENTER]do me a favour. " gameforge.subquest_13._150_say = "I dropped something when I had to run for my life[ENTER]from the tigers: It's a bundle containing[ENTER]important books, bound together with some cloth.[ENTER]If I don't have them, I can't continue my[ENTER]research on the Metin Stones. Bring me the[ENTER]Package and you will get some ore from me. " gameforge.subquest_13._160_npcChat = "I have your package. " diff --git a/sql/database_create/database_create.sql b/sql/database_create/database_create.sql new file mode 100644 index 0000000..8f72149 --- /dev/null +++ b/sql/database_create/database_create.sql @@ -0,0 +1,15 @@ +CREATE DATABASE IF NOT EXISTS account; +CREATE DATABASE IF NOT EXISTS common; +CREATE DATABASE IF NOT EXISTS log; +CREATE DATABASE IF NOT EXISTS player; +CREATE DATABASE IF NOT EXISTS hotbackup; + +CREATE USER IF NOT EXISTS 'mt2'@'localhost' IDENTIFIED BY 'mt2@pw'; + +GRANT SELECT, INSERT, UPDATE, DELETE ON `account`.* TO 'mt2'@'localhost'; +GRANT SELECT, INSERT, UPDATE, DELETE ON `common`.* TO 'mt2'@'localhost'; +GRANT SELECT, INSERT, UPDATE, DELETE ON `log`.* TO 'mt2'@'localhost'; +GRANT SELECT, INSERT, UPDATE, DELETE ON `player`.* TO 'mt2'@'localhost'; +GRANT SELECT, INSERT, UPDATE, DELETE ON `hotbackup`.* TO 'mt2'@'localhost'; + +FLUSH PRIVILEGES; \ No newline at end of file