From 1161be646530b254f65708422d38c4d4f644137a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Furkan=20G=C3=BC=C3=A7l=C3=BC?= Date: Mon, 5 Jan 2026 19:51:19 +0300 Subject: [PATCH 01/16] database script Creates required Metin2 databases, defines the mt2 user, and grants minimal DML permissions for server operation. --- sql/database_create/database_create.sql | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 sql/database_create/database_create.sql 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 From 5bd429ee5c3543acfc2ea546663c5024f1785df7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Furkan=20G=C3=BC=C3=A7l=C3=BC?= Date: Mon, 5 Jan 2026 20:20:25 +0300 Subject: [PATCH 02/16] Update make.py --- share/locale/english/quest/make.py | 39 +++++++++++++++++++----------- 1 file changed, 25 insertions(+), 14 deletions(-) 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() From a106832ad434bf45b989eec77447777d0a4f3d10 Mon Sep 17 00:00:00 2001 From: Simone Romano <19979417+SunTrustDev@users.noreply.github.com> Date: Mon, 12 Jan 2026 13:14:59 +0100 Subject: [PATCH 03/16] Fix: Skill doctrine change dialogues referencing wrong localization lines (by @ErLullo) --- share/locale/english/quest/skill_group.quest | 87 +++++++++----------- 1 file changed, 39 insertions(+), 48 deletions(-) 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 From dea3f2a295006bcb1bce5a158fab51f7f7fa958b Mon Sep 17 00:00:00 2001 From: ErLullo Date: Mon, 12 Jan 2026 22:55:50 +0100 Subject: [PATCH 04/16] Fixes subquest6 --- share/locale/english/quest/subquest_06.quest | 2 +- share/locale/english/translate.lua | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) 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 9b421dd..22fa6c5 100644 --- a/share/locale/english/translate.lua +++ b/share/locale/english/translate.lua @@ -7435,11 +7435,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. " @@ -7626,7 +7626,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. " From bbc8ac9d8d6403c243b238ca2a8f167219fa1c9b Mon Sep 17 00:00:00 2001 From: ErLullo Date: Tue, 13 Jan 2026 08:52:29 +0100 Subject: [PATCH 05/16] Update new_quest_lv7.quest MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Enforce minimum level 7 when starting the quest dialog with Octavio - Use get_old_woman_map() to show the correct village name in quest info (ask_oldwoman and return_oldwoman states) instead of hardcoding map 1 - Ensure quest progresses correctly when the player already has all required flowers (both on state enter and on wolf kills) - Extend completion check in when_one_killed() so flower sets obtained via trade or previous drops still advance the quest - Prevent negative “missing flowers†values when the player owns more items than required - Make “soup†flavour flag persistent using quest flags (pc.setqf/pc.getqf) so related dialogue is preserved across relogs - Make EXP/Yang reward text match the actual reward granted by reusing the same random values instead of recalculating them --- .../locale/english/quest/new_quest_lv7.quest | 61 +++++++++++++------ 1 file changed, 44 insertions(+), 17 deletions(-) diff --git a/share/locale/english/quest/new_quest_lv7.quest b/share/locale/english/quest/new_quest_lv7.quest index 0f5f770..f04c530 100644 --- a/share/locale/english/quest/new_quest_lv7.quest +++ b/share/locale/english/quest/new_quest_lv7.quest @@ -1,4 +1,4 @@ - quest new_quest_lv7 begin +quest new_quest_lv7 begin state start begin -- Function declaration function reward() @@ -25,7 +25,7 @@ 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 @@ -63,6 +63,7 @@ end end end + ---- ask altefrau what to do -------------------------------------------------------------------------------- state ask_oldwoman begin function get_old_woman_map() @@ -90,8 +91,8 @@ 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. + -- 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 @@ -109,14 +110,15 @@ 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__") @@ -125,7 +127,7 @@ 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? + -- "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)) @@ -172,7 +174,15 @@ 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(new_quest_lv7_drop1) >= new_quest_lv7_AmountNeed1 + and pc.count_item(new_quest_lv7_drop2) >= new_quest_lv7_AmountNeed2 + and pc.count_item(new_quest_lv7_drop3) >= new_quest_lv7_AmountNeed3 then + q.done() + set_state(return_oldwoman) + return + end end --END EDIT @@ -194,6 +204,11 @@ 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(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 end -------------- Blutrote Blume ------------------------------------------------------ -- kill a 173#Hungriger Alpha-Wolf @@ -264,7 +279,8 @@ 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 @@ -274,9 +290,10 @@ 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 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, new_quest_lv7_AmountNeed1 - pc.count_item(new_quest_lv7_drop1)))) + say_reward(string.format(gameforge.new_quest_lv7._086_say_reward, math.max(0, new_quest_lv7_AmountNeed2 - pc.count_item(new_quest_lv7_drop2)))) + say_reward(string.format(gameforge.new_quest_lv7._087_say_reward, math.max(0, new_quest_lv7_AmountNeed3 - pc.count_item(new_quest_lv7_drop3)))) say(gameforge.new_quest_lv7._081_say) set_state(collect_flowers) else @@ -466,7 +483,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 @@ -492,8 +515,11 @@ 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) + + pc.setqf("soup", 0) -- reset flavour flag after success local reward_item="0" if pc.job==0 then @@ -588,6 +614,7 @@ 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 @@ -604,4 +631,4 @@ return end end -end \ No newline at end of file +end From a1ea9e317496fc22bb8073ac7fcaddab07ad3e00 Mon Sep 17 00:00:00 2001 From: ErLullo Date: Tue, 13 Jan 2026 09:53:12 +0100 Subject: [PATCH 06/16] Update new_quest_lv7.quest MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Recompute new_quest_lv7_DestMapIndex in the goto_oldwomans_sister state based on the player’s empire. - Restrict the 9006.chat handler in goto_oldwomans_sister with `pc.get_map_index() == new_quest_lv7_DestMapIndex`, so the bouquet can only be delivered to the sister in the correct second village (Jayang/Bokjung/Bakra) and not to the old woman in the first village. This prevents completing the sister step by talking to the wrong 9006 NPC after briefly entering and leaving the destination map, and aligns the behavior with the intended narrative flow. --- share/locale/english/quest/new_quest_lv7.quest | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/share/locale/english/quest/new_quest_lv7.quest b/share/locale/english/quest/new_quest_lv7.quest index f04c530..18b3d2c 100644 --- a/share/locale/english/quest/new_quest_lv7.quest +++ b/share/locale/english/quest/new_quest_lv7.quest @@ -381,9 +381,19 @@ quest new_quest_lv7 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 + when 9006.chat.gameforge.new_quest_lv7._020_say_title with pc.get_map_index() == new_quest_lv7_DestMapIndex begin if pc.count_item(30172) >= 1 then -- has flowers in inventory target.delete("__TARGET3__") say_title(gameforge.new_quest_lv7._020_say_title) -- yellow From 8ddf5907377301c64309fc50fb98ebce7fc5a461 Mon Sep 17 00:00:00 2001 From: ErLullo Date: Tue, 13 Jan 2026 10:07:23 +0100 Subject: [PATCH 07/16] Update new_quest_lv7.quest hard reset flavour flag at quest start to keep quest restable (for debug only) --- share/locale/english/quest/new_quest_lv7.quest | 1 + 1 file changed, 1 insertion(+) diff --git a/share/locale/english/quest/new_quest_lv7.quest b/share/locale/english/quest/new_quest_lv7.quest index 18b3d2c..8f11fc0 100644 --- a/share/locale/english/quest/new_quest_lv7.quest +++ b/share/locale/english/quest/new_quest_lv7.quest @@ -45,6 +45,7 @@ quest new_quest_lv7 begin 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) From 741976a2dde6bf07284dab49d4df7df86d4b20c3 Mon Sep 17 00:00:00 2001 From: ErLullo Date: Tue, 13 Jan 2026 14:43:50 +0100 Subject: [PATCH 08/16] Update new_quest_lv7.quest removed unused quest variable --- share/locale/english/quest/new_quest_lv7.quest | 4 ---- 1 file changed, 4 deletions(-) diff --git a/share/locale/english/quest/new_quest_lv7.quest b/share/locale/english/quest/new_quest_lv7.quest index 8f11fc0..42317e0 100644 --- a/share/locale/english/quest/new_quest_lv7.quest +++ b/share/locale/english/quest/new_quest_lv7.quest @@ -147,10 +147,6 @@ quest new_quest_lv7 begin say_item_vnum(new_quest_lv7_drop3) -- 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() say_title(gameforge.new_quest_lv7._012_say_title) say(gameforge.new_quest_lv7._060_say) From 06a460a88781fce23ba64ccaea41aa77ce2075c2 Mon Sep 17 00:00:00 2001 From: ErLullo Date: Tue, 13 Jan 2026 15:12:36 +0100 Subject: [PATCH 09/16] Update new_quest_lv7.quest IDK if pc.job exists, surely pc.get_job() exists. --- share/locale/english/quest/new_quest_lv7.quest | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/share/locale/english/quest/new_quest_lv7.quest b/share/locale/english/quest/new_quest_lv7.quest index 42317e0..8a1c303 100644 --- a/share/locale/english/quest/new_quest_lv7.quest +++ b/share/locale/english/quest/new_quest_lv7.quest @@ -529,7 +529,8 @@ quest new_quest_lv7 begin pc.setqf("soup", 0) -- reset flavour flag after success local reward_item="0" - if pc.job==0 then + local job = pc.get_job() + if job==0 then local r=number(1,10) if r==1 then reward_item="00013" @@ -552,7 +553,7 @@ quest new_quest_lv7 begin elseif r==10 then reward_item="03043" end - elseif pc.job==1 then + elseif job==1 then local r=number(1,10) if r==1 then reward_item="01003" @@ -573,9 +574,9 @@ quest new_quest_lv7 begin elseif r==9 then reward_item="02033" elseif r==10 then - reward_item="2043" + reward_item="02043" end - elseif pc.job==2 then + elseif job==2 then local r=number(1, 6) if r==1 then reward_item="00013" @@ -590,7 +591,7 @@ quest new_quest_lv7 begin elseif r==6 then reward_item="00053" end - elseif pc.job==3 then + elseif job==3 then local r=number(1, 8) if r==1 then reward_item="05003" From 23d1612ce9f91d9a7154bf22e690d1627c8d8d57 Mon Sep 17 00:00:00 2001 From: ErLullo Date: Tue, 13 Jan 2026 15:44:29 +0100 Subject: [PATCH 10/16] Update new_quest_lv7.quest Use core RNG replacing math.random with number. --- share/locale/english/quest/new_quest_lv7.quest | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/share/locale/english/quest/new_quest_lv7.quest b/share/locale/english/quest/new_quest_lv7.quest index 8a1c303..6687190 100644 --- a/share/locale/english/quest/new_quest_lv7.quest +++ b/share/locale/english/quest/new_quest_lv7.quest @@ -188,7 +188,7 @@ quest new_quest_lv7 begin -- 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 From bf70e0cf217a16bac793acd4006bac1bd40ccec3 Mon Sep 17 00:00:00 2001 From: ErLullo Date: Tue, 13 Jan 2026 16:02:50 +0100 Subject: [PATCH 11/16] Update new_quest_lv7.quest Surely "notice_multine" was used for debug, so I removed this spammer code :D --- share/locale/english/quest/new_quest_lv7.quest | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/share/locale/english/quest/new_quest_lv7.quest b/share/locale/english/quest/new_quest_lv7.quest index 6687190..3213523 100644 --- a/share/locale/english/quest/new_quest_lv7.quest +++ b/share/locale/english/quest/new_quest_lv7.quest @@ -193,12 +193,12 @@ quest new_quest_lv7 begin 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) + --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 else - notice_multiline(gameforge.new_quest_lv7._082_say, notice) + --notice_multiline(gameforge.new_quest_lv7._082_say, notice) end end @@ -349,7 +349,7 @@ quest new_quest_lv7 begin end if pc.get_map_index() == new_quest_lv7_DestMapIndex then target.delete("__TARGET7__") - notice_multiline(gameforge.new_quest_lv7._125_notice, notice) + --notice_multiline(gameforge.new_quest_lv7._125_notice, notice) local v=find_npc_by_vnum(9006) if 0==v then else @@ -451,7 +451,7 @@ quest new_quest_lv7 begin end if pc.get_map_index() == new_quest_lv7_HomeMapIndex then target.delete("__TARGET7__") - notice_multiline(gameforge.new_quest_lv7._129_say, notice) + --notice_multiline(gameforge.new_quest_lv7._129_say, notice) local v=find_npc_by_vnum(20008) if 0==v then else From 955b193adcc0f92bf052055d393dcc9fdef67fac Mon Sep 17 00:00:00 2001 From: ErLullo Date: Wed, 14 Jan 2026 10:52:26 +0100 Subject: [PATCH 12/16] Tabbing style-only change; no functional behavior should be affected. --- .../locale/english/quest/new_quest_lv7.quest | 315 +++++++++--------- 1 file changed, 166 insertions(+), 149 deletions(-) diff --git a/share/locale/english/quest/new_quest_lv7.quest b/share/locale/english/quest/new_quest_lv7.quest index 3213523..aef5093 100644 --- a/share/locale/english/quest/new_quest_lv7.quest +++ b/share/locale/english/quest/new_quest_lv7.quest @@ -1,6 +1,6 @@ quest new_quest_lv7 begin state start begin - -- Function declaration + -- Function declaration function reward() local div = number(1,5) local reward = 5000 @@ -8,6 +8,7 @@ quest new_quest_lv7 begin reward = math.floor(reward/div) return reward end + function reward_exp() local div = number(1,4) local reward_exp = 4000 @@ -16,29 +17,30 @@ quest new_quest_lv7 begin 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 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 @@ -69,7 +71,7 @@ quest new_quest_lv7 begin 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 @@ -77,6 +79,7 @@ quest new_quest_lv7 begin return 41 end end + function is_my_vil() if pc.get_map_index() == new_quest_lv7.get_old_woman_map() then return true @@ -97,14 +100,16 @@ quest new_quest_lv7 begin new_quest_lv7_drop1 = 30169 -- Blutrote Blume new_quest_lv7_drop2 = 30170 -- Orangefarbene Blume new_quest_lv7_drop3 = 30171 -- Duftende gelbe Blume + -- 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 @@ -125,29 +130,29 @@ quest new_quest_lv7 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() + 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(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(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(gameforge.new_quest_lv7._055_say ) say(mob_name(new_quest_lv7_mob3)) - wait() + wait() say_title(gameforge.new_quest_lv7._012_say_title) say(gameforge.new_quest_lv7._060_say) -- Wo ist die Schwester? @@ -155,6 +160,7 @@ quest new_quest_lv7 begin 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 @@ -174,8 +180,8 @@ quest new_quest_lv7 begin -- FIX: if the player already has all flowers, go directly to return_oldwoman if pc.count_item(new_quest_lv7_drop1) >= new_quest_lv7_AmountNeed1 - and pc.count_item(new_quest_lv7_drop2) >= new_quest_lv7_AmountNeed2 - and pc.count_item(new_quest_lv7_drop3) >= new_quest_lv7_AmountNeed3 then + and pc.count_item(new_quest_lv7_drop2) >= new_quest_lv7_AmountNeed2 + and pc.count_item(new_quest_lv7_drop3) >= new_quest_lv7_AmountNeed3 then q.done() set_state(return_oldwoman) return @@ -188,25 +194,30 @@ quest new_quest_lv7 begin -- itemicon vnum of flower used for icon function when_one_killed(neededAmount, dropProb, itemIcon) if pc.count_item(itemIcon) < neededAmount then - local drop=number(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 + 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 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(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 + 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 end + -------------- Blutrote Blume ------------------------------------------------------ -- kill a 173#Hungriger Alpha-Wolf when 173.kill begin @@ -215,14 +226,16 @@ quest new_quest_lv7 begin 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 q.done() set_state(return_oldwoman) - end + end end + -------------- Duftende gelbe Blume ------------------------------------------------------ -- kill a 175#Hungriger Alpha-Blauwolf when 175.kill begin @@ -238,23 +251,19 @@ quest new_quest_lv7 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 + 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 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 + 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 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 + 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 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 @@ -262,13 +271,13 @@ quest new_quest_lv7 begin 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 @@ -279,13 +288,15 @@ quest new_quest_lv7 begin -- 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(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 say(gameforge.new_quest_lv7._110_say) -- 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, new_quest_lv7_AmountNeed1 - pc.count_item(new_quest_lv7_drop1)))) @@ -316,6 +327,7 @@ quest new_quest_lv7 begin end end end + --- go to twin sister of old woman in other kingdom--------------------------------------------------------------------------------------------------- state find_empire begin when login or enter begin @@ -324,34 +336,36 @@ quest new_quest_lv7 begin 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 + local v = find_npc_by_vnum(9006) + if 0 == v then else target.vid("__TARGET3__", v, gameforge.subquest_48._230_targetVid) end @@ -360,7 +374,6 @@ quest new_quest_lv7 begin 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 @@ -372,6 +385,7 @@ quest new_quest_lv7 begin end end end + ------ find the sister of the old woman in a different empire ------------------------------------------------------------------------------------------------------ state goto_oldwomans_sister begin when enter or login begin @@ -396,11 +410,11 @@ quest new_quest_lv7 begin say_title(gameforge.new_quest_lv7._020_say_title) -- yellow pc.remove_item(30172, pc.count_item(30172)) 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) @@ -413,11 +427,13 @@ quest new_quest_lv7 begin 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 @@ -429,22 +445,22 @@ quest new_quest_lv7 begin 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 @@ -452,8 +468,8 @@ quest new_quest_lv7 begin 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 + local v = find_npc_by_vnum(20008) + if 0 == v then else target.vid("__TARGET5__", v, gameforge.subquest_48._230_targetVid) end @@ -474,14 +490,14 @@ quest new_quest_lv7 begin 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 @@ -504,7 +520,6 @@ quest new_quest_lv7 begin 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) @@ -516,11 +531,11 @@ quest new_quest_lv7 begin 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)) -- FIX: use the same values for the actual reward pc.give_exp2(reward_exp) @@ -528,89 +543,90 @@ quest new_quest_lv7 begin pc.setqf("soup", 0) -- reset flavour flag after success - local reward_item="0" + 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" + 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 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" + 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 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 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) @@ -633,6 +649,7 @@ quest new_quest_lv7 begin return end end + ------ complete ------------------------------------------------------------------------------------------------------ state __COMPLETE__ begin when button or info begin From 73dd1a0f42ba9f4a9bd96263d012396b1b03f1f7 Mon Sep 17 00:00:00 2001 From: ErLullo Date: Wed, 14 Jan 2026 17:37:13 +0100 Subject: [PATCH 13/16] Using define's --- .../locale/english/quest/new_quest_lv7.quest | 110 +++++++++--------- 1 file changed, 53 insertions(+), 57 deletions(-) diff --git a/share/locale/english/quest/new_quest_lv7.quest b/share/locale/english/quest/new_quest_lv7.quest index aef5093..5c926a6 100644 --- a/share/locale/english/quest/new_quest_lv7.quest +++ b/share/locale/english/quest/new_quest_lv7.quest @@ -1,3 +1,20 @@ +-- 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 @@ -89,17 +106,11 @@ quest new_quest_lv7 begin 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 -- 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 @@ -136,20 +147,20 @@ quest new_quest_lv7 begin -- "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() 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() 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)) wait() @@ -165,23 +176,14 @@ quest new_quest_lv7 begin 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(new_quest_lv7_drop1) >= new_quest_lv7_AmountNeed1 - and pc.count_item(new_quest_lv7_drop2) >= new_quest_lv7_AmountNeed2 - and pc.count_item(new_quest_lv7_drop3) >= new_quest_lv7_AmountNeed3 then + 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 @@ -200,9 +202,9 @@ quest new_quest_lv7 begin -- 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 + 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 @@ -211,9 +213,9 @@ quest new_quest_lv7 begin end -- FIX: also check completion when there is no drop or flowers came from trade - 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 + 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 @@ -221,7 +223,7 @@ quest new_quest_lv7 begin -------------- 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 @@ -230,7 +232,7 @@ quest new_quest_lv7 begin -------------- 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 @@ -239,7 +241,7 @@ quest new_quest_lv7 begin -------------- 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 @@ -250,14 +252,14 @@ quest new_quest_lv7 begin 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 @@ -265,12 +267,6 @@ quest new_quest_lv7 begin 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) send_letter(gameforge.new_quest_lv7._020_say_title) q.start() @@ -294,21 +290,21 @@ quest new_quest_lv7 begin 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) -- 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, new_quest_lv7_AmountNeed1 - pc.count_item(new_quest_lv7_drop1)))) - say_reward(string.format(gameforge.new_quest_lv7._086_say_reward, math.max(0, new_quest_lv7_AmountNeed2 - pc.count_item(new_quest_lv7_drop2)))) - say_reward(string.format(gameforge.new_quest_lv7._087_say_reward, math.max(0, new_quest_lv7_AmountNeed3 - pc.count_item(new_quest_lv7_drop3)))) + 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 @@ -405,10 +401,10 @@ quest new_quest_lv7 begin end when 9006.chat.gameforge.new_quest_lv7._020_say_title with pc.get_map_index() == new_quest_lv7_DestMapIndex begin - if pc.count_item(30172) >= 1 then -- has flowers in inventory + 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) From 39a5695e156afe21b6d4f35c66a0068cd9a529b9 Mon Sep 17 00:00:00 2001 From: ErLullo Date: Thu, 15 Jan 2026 01:04:46 +0100 Subject: [PATCH 14/16] Missed .done Multilines if seems buggy --- share/locale/english/quest/new_quest_lv7.quest | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/share/locale/english/quest/new_quest_lv7.quest b/share/locale/english/quest/new_quest_lv7.quest index 5c926a6..ad5df14 100644 --- a/share/locale/english/quest/new_quest_lv7.quest +++ b/share/locale/english/quest/new_quest_lv7.quest @@ -181,9 +181,7 @@ quest new_quest_lv7 begin 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 + 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 @@ -202,9 +200,7 @@ quest new_quest_lv7 begin -- 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(ITEM_FLOWER_YELLOW) == NEED_YELLOW - and pc.count_item(ITEM_FLOWER_ORANGE) == NEED_ORANGE - and pc.count_item(ITEM_FLOWER_RED) == NEED_RED then + 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 @@ -213,9 +209,7 @@ quest new_quest_lv7 begin 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 + 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 @@ -629,6 +623,7 @@ quest new_quest_lv7 begin 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) From 1f18e67a3115e310bd95adc752d3ddb60fa15b86 Mon Sep 17 00:00:00 2001 From: ErLullo Date: Thu, 15 Jan 2026 01:22:07 +0100 Subject: [PATCH 15/16] Missed one multiline if --- share/locale/english/quest/new_quest_lv7.quest | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/share/locale/english/quest/new_quest_lv7.quest b/share/locale/english/quest/new_quest_lv7.quest index ad5df14..6f4c6b4 100644 --- a/share/locale/english/quest/new_quest_lv7.quest +++ b/share/locale/english/quest/new_quest_lv7.quest @@ -284,9 +284,7 @@ quest new_quest_lv7 begin 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(ITEM_FLOWER_RED) < NEED_RED - or pc.count_item(ITEM_FLOWER_ORANGE) < NEED_ORANGE - or pc.count_item(ITEM_FLOWER_YELLOW) < NEED_YELLOW 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) -- 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)))) From 4ec046ef688f1acf3ed5f2d0f38a4a23f4255a68 Mon Sep 17 00:00:00 2001 From: ErLullo Date: Thu, 15 Jan 2026 14:59:21 +0100 Subject: [PATCH 16/16] Added \r and \n to Replace --- share/locale/english/quest/pre_qc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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: