From 5b0a9c8ffdbac30c4ff3981167c7206ca75425c7 Mon Sep 17 00:00:00 2001 From: Jesusalva Jesusalva Date: Mon, 17 Jul 2023 01:48:54 +0000 Subject: Jesusalva/00610 --- db/constants.conf | 12 + db/mob_db2.conf | 46 +- db/re/item_db.conf | 3423 +------------------------------------------- db/re/mob_db.conf | 6 +- maps/re/006-10.mcache | Bin 236 -> 262 bytes maps/re/026-2.mcache | Bin 493 -> 510 bytes npc/001-3/_import.txt | 1 + npc/001-3/_warps.txt | 3 + npc/003-6/_import.txt | 5 - npc/003-6/_warps.txt | 4 - npc/003-6/cyndala.txt | 249 ---- npc/003-6/tamiloc.txt | 83 -- npc/006-10/_config.txt | 128 ++ npc/006-10/_import.txt | 1 + npc/006-10/_mobs.txt | 2 + npc/006-10/logic.txt | 485 +++++-- npc/017-3/gambler.txt | 165 --- npc/017-3/nico.txt | 302 ---- npc/020-1/trainer.txt | 167 --- npc/026-2/_mobs.txt | 11 +- npc/026-2/_warps.txt | 2 +- npc/033-1/_import.txt | 2 + npc/033-1/misc.txt | 111 +- npc/033-1/nico.txt | 472 ++++++ npc/033-1/trainer.txt | 184 +++ npc/033-2/magic.txt | 5 +- npc/config/events.txt | 105 +- npc/config/traps.txt | 4 +- npc/craft/price.txt | 2 +- npc/functions/main.txt | 28 + npc/functions/mobpoint.txt | 2 - npc/items/grenade.txt | 8 +- 32 files changed, 1499 insertions(+), 4519 deletions(-) create mode 100644 npc/001-3/_warps.txt delete mode 100644 npc/003-6/_import.txt delete mode 100644 npc/003-6/_warps.txt delete mode 100644 npc/003-6/cyndala.txt delete mode 100644 npc/003-6/tamiloc.txt create mode 100644 npc/006-10/_config.txt delete mode 100644 npc/017-3/gambler.txt delete mode 100644 npc/017-3/nico.txt delete mode 100644 npc/020-1/trainer.txt create mode 100644 npc/033-1/nico.txt create mode 100644 npc/033-1/trainer.txt diff --git a/db/constants.conf b/db/constants.conf index 2a58226..18ceec4 100644 --- a/db/constants.conf +++ b/db/constants.conf @@ -2024,6 +2024,10 @@ constants_db: { NPC_SWITCH_ONLINE: 915 NPC_ROLLINGSTONE: 916 + comment__: "CR npcs" + NPC_BLANC: 850 + + // Avatars (1000+) AVATAR_CARDA: 1000 AVATAR_CARD2: 1001 @@ -2259,6 +2263,14 @@ constants_db: { ACTION_HURT: 6 ACTION_SPAWN: 7 + comment__: "Event constants" + EV08_KEY: 1 + EV08_P150: 2 + EV08_P100: 4 + EV08_P075: 8 + EV08_P050: 16 + EV08_P025: 32 + comment__: "Misc constants" ASK_YES: 1 ASK_NO: 2 diff --git a/db/mob_db2.conf b/db/mob_db2.conf index e21cc2a..c4d6f50 100644 --- a/db/mob_db2.conf +++ b/db/mob_db2.conf @@ -68,6 +68,50 @@ mob_db: ( DamageTakenRate: damage taken rate (int, defaults to 100) }, ******************************************************************************/ - +// Monsters native to Crossroads are defined here +// Their IDs are 2000+ +{ + Id: 2000 + SpriteName: "Blanc" + Name: "Blanc Halifax" + Lv: 101 + Hp: 750000 + Sp: 0 + Exp: 140000 + JExp: 1000 + AttackRange: 8 + Attack: [620, 670] + Def: 45 + Mdef: 2 + Stats: { + Str: 12 + Agi: 23 + Vit: 88 + Int: 110 + Dex: 141 + Luk: 77 + } + ViewRange: 9 + ChaseRange: 12 + Race: 2 + Element: (7, 1) + Mode: { + CanMove: true + CanAttack: true + Aggressive: true + Angry: true + ChangeTargetMelee: true + ChangeChase: true + CastSensorChase: true + Boss: true + } + MoveSpeed: 320 + AttackDelay: 2100 + AttackMotion: 672 + DamageMotion: 200 + Drops: { + Bloodstone: 2000 + } +}, ) diff --git a/db/re/item_db.conf b/db/re/item_db.conf index c44605a..5dc3d93 100644 --- a/db/re/item_db.conf +++ b/db/re/item_db.conf @@ -145,9 +145,6 @@ item_db: ( OnDropScript: <" OnDrop Script (can also be multi-line) "> OnTakeScript: <" OnTake Script (can also be multi-line) "> OnInsertCardScript: <" OnInsert card Script (can also be multi-line) "> - AllowCards: { - idNUM: amount (NUM is id number, amount is amount) - } AllowAmmo: { idNUM: something (NUM is id number) } @@ -5495,6 +5492,16 @@ item_db: ( Refine: false //DropAnnounce: true }, +{ + Id: 927 + AegisName: "ComplaintForm" + Name: "Complaint Form" + Type: "IT_ETC" + Buy: 175 + Sell: 50 + Weight: 1 + Refine: false +}, // @@ -6431,30 +6438,6 @@ item_db: ( Loc: "EQP_HEAD_MID" EquipLv: 49 Refine: true - AllowCards: { - id5000: 1 - id5001: 1 - id5002: 1 - id5003: 1 - id5004: 1 - id5005: 1 - id5006: 1 - id5007: 1 - id5008: 1 - id5009: 1 - id5010: 1 - id5011: 1 - id5012: 1 - id5013: 1 - id5014: 1 - id5015: 1 - id5016: 1 - id5017: 1 - id5018: 1 - id5019: 1 - id5020: 1 - id5021: 1 - } Script: <" bonus bDef2,4; "> @@ -6472,30 +6455,6 @@ item_db: ( Loc: "EQP_HEAD_MID" EquipLv: 5 Refine: true - AllowCards: { - id5000: 1 - id5001: 1 - id5002: 1 - id5003: 1 - id5004: 1 - id5005: 1 - id5006: 1 - id5007: 1 - id5008: 1 - id5009: 1 - id5010: 1 - id5011: 1 - id5012: 1 - id5013: 1 - id5014: 1 - id5015: 1 - id5016: 1 - id5017: 1 - id5018: 1 - id5019: 1 - id5020: 1 - id5021: 1 - } Script: <" bonus bMaxHP,3; "> @@ -6631,30 +6590,6 @@ item_db: ( nomail: true noauction: true } - AllowCards: { - id5000: 1 - id5001: 1 - id5002: 1 - id5003: 1 - id5004: 1 - id5005: 1 - id5006: 1 - id5007: 1 - id5008: 1 - id5009: 1 - id5010: 1 - id5011: 1 - id5012: 1 - id5013: 1 - id5014: 1 - id5015: 1 - id5016: 1 - id5017: 1 - id5018: 1 - id5019: 1 - id5020: 1 - id5021: 1 - } Script: <" bonus bMaxHP,3; "> @@ -6726,30 +6661,6 @@ item_db: ( Loc: "EQP_HEAD_MID" EquipLv: 8 Refine: true - AllowCards: { - id5000: 1 - id5001: 1 - id5002: 1 - id5003: 1 - id5004: 1 - id5005: 1 - id5006: 1 - id5007: 1 - id5008: 1 - id5009: 1 - id5010: 1 - id5011: 1 - id5012: 1 - id5013: 1 - id5014: 1 - id5015: 1 - id5016: 1 - id5017: 1 - id5018: 1 - id5019: 1 - id5020: 1 - id5021: 1 - } Script: <" bonus bMaxHP,6; "> @@ -6784,30 +6695,6 @@ item_db: ( Loc: "EQP_HEAD_MID" EquipLv: 13 Refine: true - AllowCards: { - id5000: 1 - id5001: 1 - id5002: 1 - id5003: 1 - id5004: 1 - id5005: 1 - id5006: 1 - id5007: 1 - id5008: 1 - id5009: 1 - id5010: 1 - id5011: 1 - id5012: 1 - id5013: 1 - id5014: 1 - id5015: 1 - id5016: 1 - id5017: 1 - id5018: 1 - id5019: 1 - id5020: 1 - id5021: 1 - } Script: <" bonus bMaxHP,12; bonus bDef2,1; @@ -6826,30 +6713,6 @@ item_db: ( Loc: "EQP_HEAD_MID" EquipLv: 20 Refine: true - AllowCards: { - id5000: 1 - id5001: 1 - id5002: 1 - id5003: 1 - id5004: 1 - id5005: 1 - id5006: 1 - id5007: 1 - id5008: 1 - id5009: 1 - id5010: 1 - id5011: 1 - id5012: 1 - id5013: 1 - id5014: 1 - id5015: 1 - id5016: 1 - id5017: 1 - id5018: 1 - id5019: 1 - id5020: 1 - id5021: 1 - } Script: <" bonus bMatk,20; bonus bMdef,25; @@ -6871,30 +6734,6 @@ item_db: ( Loc: "EQP_HEAD_MID" EquipLv: 55 Refine: true - AllowCards: { - id5000: 1 - id5001: 1 - id5002: 1 - id5003: 1 - id5004: 1 - id5005: 1 - id5006: 1 - id5007: 1 - id5008: 1 - id5009: 1 - id5010: 1 - id5011: 1 - id5012: 1 - id5013: 1 - id5014: 1 - id5015: 1 - id5016: 1 - id5017: 1 - id5018: 1 - id5019: 1 - id5020: 1 - id5021: 1 - } Script: <" bonus bMatk,40; bonus bMdef,50; @@ -6916,30 +6755,6 @@ item_db: ( Loc: "EQP_HEAD_MID" EquipLv: 40 Refine: true - AllowCards: { - id5000: 1 - id5001: 1 - id5002: 1 - id5003: 1 - id5004: 1 - id5005: 1 - id5006: 1 - id5007: 1 - id5008: 1 - id5009: 1 - id5010: 1 - id5011: 1 - id5012: 1 - id5013: 1 - id5014: 1 - id5015: 1 - id5016: 1 - id5017: 1 - id5018: 1 - id5019: 1 - id5020: 1 - id5021: 1 - } Script: <" bonus bMaxSP,10; bonus bMatk,15; @@ -6961,30 +6776,6 @@ item_db: ( Loc: "EQP_HEAD_MID" EquipLv: 15 Refine: true - AllowCards: { - id5000: 1 - id5001: 1 - id5002: 1 - id5003: 1 - id5004: 1 - id5005: 1 - id5006: 1 - id5007: 1 - id5008: 1 - id5009: 1 - id5010: 1 - id5011: 1 - id5012: 1 - id5013: 1 - id5014: 1 - id5015: 1 - id5016: 1 - id5017: 1 - id5018: 1 - id5019: 1 - id5020: 1 - id5021: 1 - } Script: <" bonus bMaxHP,14; bonus bDef2,1; @@ -7003,30 +6794,6 @@ item_db: ( Loc: "EQP_HEAD_MID" EquipLv: 32 Refine: true - AllowCards: { - id5000: 1 - id5001: 1 - id5002: 1 - id5003: 1 - id5004: 1 - id5005: 1 - id5006: 1 - id5007: 1 - id5008: 1 - id5009: 1 - id5010: 1 - id5011: 1 - id5012: 1 - id5013: 1 - id5014: 1 - id5015: 1 - id5016: 1 - id5017: 1 - id5018: 1 - id5019: 1 - id5020: 1 - id5021: 1 - } Script: <" bonus bMaxHP,44; bonus bDef2,3; @@ -7228,91 +6995,6 @@ item_db: ( Loc: "EQP_HEAD_MID" EquipLv: 109 Refine: true - AllowCards: { - id5000: 1 - id5001: 1 - id5002: 1 - id5003: 1 - id5004: 1 - id5005: 1 - id5006: 1 - id5007: 1 - id5008: 1 - id5009: 1 - id5010: 1 - id5011: 1 - id5012: 1 - id5013: 1 - id5014: 1 - id5015: 1 - id5016: 1 - id5017: 1 - id5018: 1 - id5019: 1 - id5020: 1 - id5021: 1 - // If you don't dye the cap, it can be powerful - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" bonus bMaxHP,350; bonus bDef2,10; @@ -7332,30 +7014,6 @@ item_db: ( Loc: "EQP_HEAD_MID" EquipLv: 15 Refine: true - AllowCards: { - id5000: 1 - id5001: 1 - id5002: 1 - id5003: 1 - id5004: 1 - id5005: 1 - id5006: 1 - id5007: 1 - id5008: 1 - id5009: 1 - id5010: 1 - id5011: 1 - id5012: 1 - id5013: 1 - id5014: 1 - id5015: 1 - id5016: 1 - id5017: 1 - id5018: 1 - id5019: 1 - id5020: 1 - id5021: 1 - } Script: <" bonus bMaxHP,14; bonus bDef2,1; @@ -7653,30 +7311,6 @@ item_db: ( Loc: "EQP_SHOES" EquipLv: 20 Refine: false - AllowCards: { - id5000: 1 - id5001: 1 - id5002: 1 - id5003: 1 - id5004: 1 - id5005: 1 - id5006: 1 - id5007: 1 - id5008: 1 - id5009: 1 - id5010: 1 - id5011: 1 - id5012: 1 - id5013: 1 - id5014: 1 - id5015: 1 - id5016: 1 - id5017: 1 - id5018: 1 - id5019: 1 - id5020: 1 - id5021: 1 - } Script: <" bonus bMatk,10; bonus bMaxSP,10; @@ -8027,30 +7661,6 @@ item_db: ( Loc: "EQP_GARMENT" EquipLv: 14 Refine: false - AllowCards: { - id5000: 1 - id5001: 1 - id5002: 1 - id5003: 1 - id5004: 1 - id5005: 1 - id5006: 1 - id5007: 1 - id5008: 1 - id5009: 1 - id5010: 1 - id5011: 1 - id5012: 1 - id5013: 1 - id5014: 1 - id5015: 1 - id5016: 1 - id5017: 1 - id5018: 1 - id5019: 1 - id5020: 1 - id5021: 1 - } Script: <" bonus bMatk,10; bonus bMaxSP,10; @@ -8104,9 +7714,6 @@ item_db: ( Loc: "EQP_GARMENT" EquipLv: 40 Refine: false - AllowCards: { - id5030: 2 - } Script: <" bonus bAspd,8; "> @@ -8340,30 +7947,6 @@ item_db: ( Loc: "EQP_HEAD_LOW" EquipLv: 13 Refine: false - AllowCards: { - id5000: 1 - id5001: 1 - id5002: 1 - id5003: 1 - id5004: 1 - id5005: 1 - id5006: 1 - id5007: 1 - id5008: 1 - id5009: 1 - id5010: 1 - id5011: 1 - id5012: 1 - id5013: 1 - id5014: 1 - id5015: 1 - id5016: 1 - id5017: 1 - id5018: 1 - id5019: 1 - id5020: 1 - id5021: 1 - } Script: <" bonus bMaxHP,6; bonus bDef2, 1; @@ -8382,30 +7965,6 @@ item_db: ( Loc: "EQP_HEAD_LOW" EquipLv: 15 Refine: false - AllowCards: { - id5000: 1 - id5001: 1 - id5002: 1 - id5003: 1 - id5004: 1 - id5005: 1 - id5006: 1 - id5007: 1 - id5008: 1 - id5009: 1 - id5010: 1 - id5011: 1 - id5012: 1 - id5013: 1 - id5014: 1 - id5015: 1 - id5016: 1 - id5017: 1 - id5018: 1 - id5019: 1 - id5020: 1 - id5021: 1 - } Script: <" bonus bMaxHP,7; bonus bDef2, 1; @@ -8424,30 +7983,6 @@ item_db: ( Loc: "EQP_HEAD_LOW" EquipLv: 36 Refine: false - AllowCards: { - id5000: 1 - id5001: 1 - id5002: 1 - id5003: 1 - id5004: 1 - id5005: 1 - id5006: 1 - id5007: 1 - id5008: 1 - id5009: 1 - id5010: 1 - id5011: 1 - id5012: 1 - id5013: 1 - id5014: 1 - id5015: 1 - id5016: 1 - id5017: 1 - id5018: 1 - id5019: 1 - id5020: 1 - id5021: 1 - } Script: <" bonus bMaxHP,26; bonus bDef2, 4; @@ -8466,30 +8001,6 @@ item_db: ( Loc: "EQP_HEAD_LOW" EquipLv: 59 Refine: false - AllowCards: { - id5000: 1 - id5001: 1 - id5002: 1 - id5003: 1 - id5004: 1 - id5005: 1 - id5006: 1 - id5007: 1 - id5008: 1 - id5009: 1 - id5010: 1 - id5011: 1 - id5012: 1 - id5013: 1 - id5014: 1 - id5015: 1 - id5016: 1 - id5017: 1 - id5018: 1 - id5019: 1 - id5020: 1 - id5021: 1 - } Script: <" bonus bMaxSP,30; bonus bDef2,-1; @@ -8508,30 +8019,6 @@ item_db: ( Loc: "EQP_HEAD_LOW" EquipLv: 15 Refine: false - AllowCards: { - id5000: 1 - id5001: 1 - id5002: 1 - id5003: 1 - id5004: 1 - id5005: 1 - id5006: 1 - id5007: 1 - id5008: 1 - id5009: 1 - id5010: 1 - id5011: 1 - id5012: 1 - id5013: 1 - id5014: 1 - id5015: 1 - id5016: 1 - id5017: 1 - id5018: 1 - id5019: 1 - id5020: 1 - id5021: 1 - } Script: <" bonus bMaxHP,7; bonus bDef2, 2; @@ -8705,30 +8192,6 @@ item_db: ( Loc: "EQP_HEAD_LOW" EquipLv: 21 Refine: false - AllowCards: { - id5000: 1 - id5001: 1 - id5002: 1 - id5003: 1 - id5004: 1 - id5005: 1 - id5006: 1 - id5007: 1 - id5008: 1 - id5009: 1 - id5010: 1 - id5011: 1 - id5012: 1 - id5013: 1 - id5014: 1 - id5015: 1 - id5016: 1 - id5017: 1 - id5018: 1 - id5019: 1 - id5020: 1 - id5021: 1 - } Script: <" bonus bMaxHP,12; bonus bDef2, 2; @@ -8793,14 +8256,6 @@ item_db: ( EquipLv: 40 Refine: false Slots: 1 - AllowCards: { - id5031: 1 - id5032: 1 - id5033: 1 - id5034: 1 - id5035: 1 - id5036: 1 - } }, { Id: 2508 @@ -8885,14 +8340,6 @@ item_db: ( EquipLv: 20 Refine: false Slots: 1 - AllowCards: { - id5031: 1 - id5032: 1 - id5033: 1 - id5034: 1 - id5035: 1 - id5036: 1 - } }, // Shields { @@ -9307,30 +8754,6 @@ item_db: ( Loc: "EQP_HEAD_TOP" EquipLv: 12 Refine: false - AllowCards: { - id5000: 1 - id5001: 1 - id5002: 1 - id5003: 1 - id5004: 1 - id5005: 1 - id5006: 1 - id5007: 1 - id5008: 1 - id5009: 1 - id5010: 1 - id5011: 1 - id5012: 1 - id5013: 1 - id5014: 1 - id5015: 1 - id5016: 1 - id5017: 1 - id5018: 1 - id5019: 1 - id5020: 1 - id5021: 1 - } Script: <" bonus bMaxHP,8; bonus bDef2, 1; @@ -9470,30 +8893,6 @@ item_db: ( Loc: "EQP_HEAD_TOP" EquipLv: 30 Refine: false - AllowCards: { - id5000: 1 - id5001: 1 - id5002: 1 - id5003: 1 - id5004: 1 - id5005: 1 - id5006: 1 - id5007: 1 - id5008: 1 - id5009: 1 - id5010: 1 - id5011: 1 - id5012: 1 - id5013: 1 - id5014: 1 - id5015: 1 - id5016: 1 - id5017: 1 - id5018: 1 - id5019: 1 - id5020: 1 - id5021: 1 - } Script: <" bonus bMaxHP,30; bonus bDef2, 3; @@ -9512,30 +8911,6 @@ item_db: ( Loc: "EQP_HEAD_TOP" EquipLv: 55 Refine: true - AllowCards: { - id5000: 1 - id5001: 1 - id5002: 1 - id5003: 1 - id5004: 1 - id5005: 1 - id5006: 1 - id5007: 1 - id5008: 1 - id5009: 1 - id5010: 1 - id5011: 1 - id5012: 1 - id5013: 1 - id5014: 1 - id5015: 1 - id5016: 1 - id5017: 1 - id5018: 1 - id5019: 1 - id5020: 1 - id5021: 1 - } Script: <" bonus bMaxHP,106; bonus bSpeedAddRate, -2; @@ -9591,30 +8966,6 @@ item_db: ( EquipLv: 2 Refine: false //DropAnnounce: true - AllowCards: { - id5000: 1 - id5001: 1 - id5002: 1 - id5003: 1 - id5004: 1 - id5005: 1 - id5006: 1 - id5007: 1 - id5008: 1 - id5009: 1 - id5010: 1 - id5011: 1 - id5012: 1 - id5013: 1 - id5014: 1 - id5015: 1 - id5016: 1 - id5017: 1 - id5018: 1 - id5019: 1 - id5020: 1 - id5021: 1 - } }, { Id: 2913 @@ -9697,30 +9048,6 @@ item_db: ( Loc: "EQP_HEAD_TOP" EquipLv: 25 Refine: false - AllowCards: { - id5000: 1 - id5001: 1 - id5002: 1 - id5003: 1 - id5004: 1 - id5005: 1 - id5006: 1 - id5007: 1 - id5008: 1 - id5009: 1 - id5010: 1 - id5011: 1 - id5012: 1 - id5013: 1 - id5014: 1 - id5015: 1 - id5016: 1 - id5017: 1 - id5018: 1 - id5019: 1 - id5020: 1 - id5021: 1 - } Script: <" bonus bMaxHP,23; bonus bDef2, 2; @@ -9759,30 +9086,6 @@ item_db: ( Loc: "EQP_HEAD_TOP" EquipLv: 60 Refine: true - AllowCards: { - id5000: 1 - id5001: 1 - id5002: 1 - id5003: 1 - id5004: 1 - id5005: 1 - id5006: 1 - id5007: 1 - id5008: 1 - id5009: 1 - id5010: 1 - id5011: 1 - id5012: 1 - id5013: 1 - id5014: 1 - id5015: 1 - id5016: 1 - id5017: 1 - id5018: 1 - id5019: 1 - id5020: 1 - id5021: 1 - } Script: <" bonus bMaxHP,92; bonus bSpeedAddRate, 1; @@ -10085,30 +9388,6 @@ item_db: ( Loc: "EQP_HEAD_TOP" EquipLv: 19 Refine: false - AllowCards: { - id5000: 1 - id5001: 1 - id5002: 1 - id5003: 1 - id5004: 1 - id5005: 1 - id5006: 1 - id5007: 1 - id5008: 1 - id5009: 1 - id5010: 1 - id5011: 1 - id5012: 1 - id5013: 1 - id5014: 1 - id5015: 1 - id5016: 1 - id5017: 1 - id5018: 1 - id5019: 1 - id5020: 1 - id5021: 1 - } Script: <" bonus bMaxHP,15; bonus bDef2, 2; @@ -10596,30 +9875,6 @@ item_db: ( Loc: "EQP_HEAD_TOP" EquipLv: 30 Refine: false - AllowCards: { - id5000: 1 - id5001: 1 - id5002: 1 - id5003: 1 - id5004: 1 - id5005: 1 - id5006: 1 - id5007: 1 - id5008: 1 - id5009: 1 - id5010: 1 - id5011: 1 - id5012: 1 - id5013: 1 - id5014: 1 - id5015: 1 - id5016: 1 - id5017: 1 - id5018: 1 - id5019: 1 - id5020: 1 - id5021: 1 - } Script: <" bonus bMaxHP,30; bonus bStr,2; @@ -11178,30 +10433,6 @@ item_db: ( Loc: "EQP_HEAD_TOP" EquipLv: 1 Refine: false - AllowCards: { - id5000: 1 - id5001: 1 - id5002: 1 - id5003: 1 - id5004: 1 - id5005: 1 - id5006: 1 - id5007: 1 - id5008: 1 - id5009: 1 - id5010: 1 - id5011: 1 - id5012: 1 - id5013: 1 - id5014: 1 - id5015: 1 - id5016: 1 - id5017: 1 - id5018: 1 - id5019: 1 - id5020: 1 - id5021: 1 - } }, { Id: 3028 @@ -11284,10 +10515,6 @@ item_db: ( EquipLv: 25 Refine: false Slots: 1 - AllowCards: { - id5033: 1 - id5036: 1 - } // How can we set 5033 and 5036 give only 1 dex or 1 luck to this item ? @jesusalva // We probably can't. Just kidding, we use getequipcardid(), check if it is PolishedWhatever, // and add a -1 bonus. @@ -11455,44 +10682,6 @@ item_db: ( Refine: true Subtype: "W_DAGGER" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" skill TMW2_OVERLOAD, getrefine(); "> @@ -11513,44 +10702,6 @@ item_db: ( Refine: true Subtype: "W_1HSWORD" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" skill TMW2_OVERLOAD, getrefine(); "> @@ -11571,44 +10722,6 @@ item_db: ( Refine: true Subtype: "W_1HSWORD" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" skill TMW2_OVERLOAD, getrefine(); "> @@ -11629,44 +10742,6 @@ item_db: ( Refine: true Subtype: "W_1HSWORD" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" skill TMW2_OVERLOAD, getrefine(); "> @@ -11687,44 +10762,6 @@ item_db: ( Refine: true Subtype: "W_1HSWORD" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" skill TMW2_OVERLOAD, getrefine(); "> @@ -11745,44 +10782,6 @@ item_db: ( Refine: true Subtype: "W_DAGGER" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" skill TMW2_OVERLOAD, getrefine(); "> @@ -11803,44 +10802,6 @@ item_db: ( Refine: true Subtype: "W_DAGGER" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" skill TMW2_OVERLOAD, getrefine(); "> @@ -11861,44 +10822,6 @@ item_db: ( Refine: true Subtype: "W_DAGGER" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" skill TMW2_OVERLOAD, getrefine(); "> @@ -11919,44 +10842,6 @@ item_db: ( Refine: true Subtype: "W_DAGGER" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" skill TMW2_OVERLOAD, getrefine(); "> @@ -11977,44 +10862,6 @@ item_db: ( Refine: true Subtype: "W_DAGGER" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" skill TMW2_OVERLOAD, getrefine(); "> @@ -12035,44 +10882,6 @@ item_db: ( Refine: true Subtype: "W_DAGGER" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" skill TMW2_OVERLOAD, getrefine(); "> @@ -12093,44 +10902,6 @@ item_db: ( Refine: true Subtype: "W_1HSWORD" Slots: 2 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" bonus bAtkEle,Ele_Holy; skill TMW2_OVERLOAD, getrefine(); @@ -12151,44 +10922,6 @@ item_db: ( Refine: true Subtype: "W_DAGGER" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" skill TMW2_OVERLOAD, getrefine(); "> @@ -12209,44 +10942,6 @@ item_db: ( Refine: true Subtype: "W_1HSWORD" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" skill TMW2_OVERLOAD, getrefine(); "> @@ -12267,44 +10962,6 @@ item_db: ( Refine: true Subtype: "W_1HSWORD" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" bonus bAtkEle,Ele_Water; skill TMW2_OVERLOAD, getrefine(); @@ -12326,44 +10983,6 @@ item_db: ( Refine: true Subtype: "W_DAGGER" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" skill TMW2_OVERLOAD, getrefine(); "> @@ -12384,44 +11003,6 @@ item_db: ( Refine: true Subtype: "W_1HSWORD" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" skill TMW2_OVERLOAD, getrefine(); "> @@ -12443,44 +11024,6 @@ item_db: ( Refine: true Subtype: "W_STAFF" Slots: 2 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } //DropAnnounce: true Script: <" bonus bAtk,(BaseLevel-40)*4; @@ -12506,44 +11049,6 @@ item_db: ( Refine: true Subtype: "W_1HSWORD" Slots: 2 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } //Script: <" itemskill SM_MAGNUM,1; "> // Consumable only - eg Grenade //skill SM_MAGNUM,3; // [22:27:11] <{41444d494e}> bonus3 bAutoSpell,SKILLNAME,SKILLELVEL,PARAM1; @@ -12572,44 +11077,6 @@ item_db: ( Refine: true Subtype: "W_1HSWORD" Slots: 2 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" bonus bAtkEle,Ele_Dark; bonus bAtk,(BaseLevel-60)*3; @@ -12634,44 +11101,6 @@ item_db: ( Refine: true Subtype: "W_1HSWORD" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" skill TMW2_OVERLOAD, getrefine(); "> @@ -12693,44 +11122,6 @@ item_db: ( Refine: true Subtype: "W_2HMACE" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" bonus bAgi, -2; bonus bDex, -1; @@ -12755,44 +11146,6 @@ item_db: ( Refine: true Subtype: "W_2HMACE" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" bonus bStr, 3; bonus bDex, -6; @@ -12817,44 +11170,6 @@ item_db: ( Refine: true Subtype: "W_2HMACE" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" bonus bDex, -4; bonus bDef, -32; @@ -12878,44 +11193,6 @@ item_db: ( Refine: true Subtype: "W_2HMACE" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" bonus bDex, -5; bonus bDef, -40; @@ -12939,44 +11216,6 @@ item_db: ( Refine: true Subtype: "W_2HMACE" Slots: 2 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" bonus bAtk,(BaseLevel-60)*2; bonus bCritical, 12; @@ -13002,44 +11241,6 @@ item_db: ( Refine: true Subtype: "W_2HSPEAR" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" bonus bDex, -7; bonus bHit, 3; @@ -13064,44 +11265,6 @@ item_db: ( Refine: true Subtype: "W_1HSWORD" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" skill TMW2_OVERLOAD, getrefine(); "> @@ -13122,44 +11285,6 @@ item_db: ( Refine: true Subtype: "W_1HSWORD" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" skill TMW2_OVERLOAD, getrefine(); "> @@ -13180,44 +11305,6 @@ item_db: ( Refine: true Subtype: "W_DAGGER" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" skill TMW2_OVERLOAD, getrefine(); "> @@ -13239,44 +11326,6 @@ item_db: ( Refine: true Subtype: "W_2HMACE" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" bonus bStr, 8; bonus bAgi, -10; @@ -13304,44 +11353,6 @@ item_db: ( Refine: true Subtype: "W_1HSWORD" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" skill TMW2_OVERLOAD, getrefine(); "> @@ -13363,44 +11374,6 @@ item_db: ( Refine: true Subtype: "W_2HMACE" Slots: 2 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" bonus bDex, -9; bonus bHit, 4; @@ -13425,44 +11398,6 @@ item_db: ( Refine: true Subtype: "W_2HMACE" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" bonus bDex, -7; bonus bDef, -57; @@ -13486,44 +11421,6 @@ item_db: ( Refine: true Subtype: "W_2HSPEAR" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" bonus bDex, -8; bonus bHit, 4; @@ -13548,44 +11445,6 @@ item_db: ( Refine: true Subtype: "W_KATAR" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" bonus2 bAddMonsterDropChainItem,ITMCHAIN_ORE,RC_Mineral; "> @@ -13607,44 +11466,6 @@ item_db: ( Refine: true Subtype: "W_KATAR" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" bonus bAtk,(BaseLevel-60)*3; bonus bCritical, min(5, BaseLevel/24); @@ -13675,44 +11496,6 @@ item_db: ( Refine: true Subtype: "W_KATAR" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" bonus bAtk,(BaseLevel-60)*3; bonus bAgi, 1-(BaseLevel/10); @@ -13745,44 +11528,6 @@ item_db: ( Refine: true Subtype: "W_1HSWORD" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" bonus bAtk,(BaseLevel-60)*4; bonus bFleeRate, (BaseLevel/10); @@ -13811,44 +11556,6 @@ item_db: ( Refine: true Subtype: "W_WHIP" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" bonus bAtk,(BaseLevel-60)*4; bonus bFleeRate, -(BaseLevel/9); @@ -13876,44 +11583,6 @@ item_db: ( Refine: true Subtype: "W_1HSWORD" Slots: 2 - AllowCards: { - id5022: 2 - id5023: 2 - id5024: 2 - id5025: 2 - id5026: 2 - id5027: 2 - id5028: 2 - id5029: 2 - id5037: 2 - id5038: 2 - id5039: 2 - id5040: 2 - id5041: 2 - id5042: 2 - id5043: 2 - id5044: 2 - id5045: 2 - id5046: 2 - id5047: 2 - id5048: 2 - id5049: 2 - id5050: 2 - id5051: 2 - id5052: 2 - id5053: 2 - id5054: 2 - id5055: 2 - id5056: 2 - id5057: 2 - id5058: 2 - id5059: 2 - id5060: 2 - id5061: 2 - id5062: 2 - id5063: 2 - id5064: 2 - } // Equipment level is 1 on purpose. Less level = less worthy = more damage by wielding Trade: { nodrop: true @@ -13978,44 +11647,6 @@ item_db: ( Refine: true Subtype: "W_KNUCKLE" Slots: 2 - AllowCards: { - id5022: 2 - id5023: 2 - id5024: 2 - id5025: 2 - id5026: 2 - id5027: 2 - id5028: 2 - id5029: 2 - id5037: 2 - id5038: 2 - id5039: 2 - id5040: 2 - id5041: 2 - id5042: 2 - id5043: 2 - id5044: 2 - id5045: 2 - id5046: 2 - id5047: 2 - id5048: 2 - id5049: 2 - id5050: 2 - id5051: 2 - id5052: 2 - id5053: 2 - id5054: 2 - id5055: 2 - id5056: 2 - id5057: 2 - id5058: 2 - id5059: 2 - id5060: 2 - id5061: 2 - id5062: 2 - id5063: 2 - id5064: 2 - } // Equipment level is 1 on purpose. Less level = less worthy = more damage by wielding Trade: { nodrop: true @@ -14058,44 +11689,6 @@ item_db: ( Refine: true Subtype: "W_BOW" Slots: 2 - AllowCards: { - id5022: 2 - id5023: 2 - id5024: 2 - id5025: 2 - id5026: 2 - id5027: 2 - id5028: 2 - id5029: 2 - id5037: 2 - id5038: 2 - id5039: 2 - id5040: 2 - id5041: 2 - id5042: 2 - id5043: 2 - id5044: 2 - id5045: 2 - id5046: 2 - id5047: 2 - id5048: 2 - id5049: 2 - id5050: 2 - id5051: 2 - id5052: 2 - id5053: 2 - id5054: 2 - id5055: 2 - id5056: 2 - id5057: 2 - id5058: 2 - id5059: 2 - id5060: 2 - id5061: 2 - id5062: 2 - id5063: 2 - id5064: 2 - } Trade: { nodrop: true notrade: true @@ -14147,44 +11740,6 @@ item_db: ( Refine: true Subtype: "W_STAFF" Slots: 2 - AllowCards: { - id5022: 2 - id5023: 2 - id5024: 2 - id5025: 2 - id5026: 2 - id5027: 2 - id5028: 2 - id5029: 2 - id5037: 2 - id5038: 2 - id5039: 2 - id5040: 2 - id5041: 2 - id5042: 2 - id5043: 2 - id5044: 2 - id5045: 2 - id5046: 2 - id5047: 2 - id5048: 2 - id5049: 2 - id5050: 2 - id5051: 2 - id5052: 2 - id5053: 2 - id5054: 2 - id5055: 2 - id5056: 2 - id5057: 2 - id5058: 2 - id5059: 2 - id5060: 2 - id5061: 2 - id5062: 2 - id5063: 2 - id5064: 2 - } Trade: { nodrop: true notrade: true @@ -14234,44 +11789,6 @@ item_db: ( noauction: true } Slots: 2 - AllowCards: { - id5022: 2 - id5023: 2 - id5024: 2 - id5025: 2 - id5026: 2 - id5027: 2 - id5028: 2 - id5029: 2 - id5037: 2 - id5038: 2 - id5039: 2 - id5040: 2 - id5041: 2 - id5042: 2 - id5043: 2 - id5044: 2 - id5045: 2 - id5046: 2 - id5047: 2 - id5048: 2 - id5049: 2 - id5050: 2 - id5051: 2 - id5052: 2 - id5053: 2 - id5054: 2 - id5055: 2 - id5056: 2 - id5057: 2 - id5058: 2 - id5059: 2 - id5060: 2 - id5061: 2 - id5062: 2 - id5063: 2 - id5064: 2 - } Script: <" bonus bFlee2,20; bonus bFlee,20; @@ -15492,44 +13009,6 @@ item_db: ( EquipLv: 5 Subtype: "W_BOW" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } AllowAmmo: { Id6500: 1 Id6501: 1 @@ -15563,44 +13042,6 @@ item_db: ( EquipLv: 15 Subtype: "W_BOW" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } AllowAmmo: { Id6500: 1 Id6501: 1 @@ -15633,44 +13074,6 @@ item_db: ( EquipLv: 25 Subtype: "W_BOW" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } AllowAmmo: { Id6500: 1 Id6501: 1 @@ -15704,44 +13107,6 @@ item_db: ( EquipLv: 40 Subtype: "W_BOW" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } AllowAmmo: { Id6500: 1 Id6501: 1 @@ -15775,44 +13140,6 @@ item_db: ( EquipLv: 60 Subtype: "W_BOW" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } AllowAmmo: { Id6500: 1 Id6501: 1 @@ -15846,44 +13173,6 @@ item_db: ( EquipLv: 80 Subtype: "W_BOW" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } AllowAmmo: { Id6500: 1 Id6501: 1 @@ -15917,44 +13206,6 @@ item_db: ( EquipLv: 100 Subtype: "W_BOW" Slots: 2 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } AllowAmmo: { Id6500: 1 Id6501: 1 @@ -15988,44 +13239,6 @@ item_db: ( EquipLv: 60 Subtype: "W_RIFLE" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Refine: true AllowAmmo: { Id6510: 1 @@ -16057,44 +13270,6 @@ item_db: ( EquipLv: 60 Subtype: "W_GATLING" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Refine: true AllowAmmo: { Id6510: 1 @@ -16128,44 +13303,6 @@ item_db: ( EquipLv: 60 Subtype: "W_SHOTGUN" Slots: 2 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Refine: true AllowAmmo: { Id6510: 1 @@ -16196,44 +13333,6 @@ item_db: ( EquipLv: 60 Subtype: "W_REVOLVER" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Refine: true AllowAmmo: { Id6510: 1 @@ -16262,44 +13361,6 @@ item_db: ( EquipLv: 70 Subtype: "W_RIFLE" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Refine: true AllowAmmo: { Id6510: 1 @@ -16516,44 +13577,6 @@ item_db: ( Refine: true Subtype: "W_STAFF" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" //bonus bAttack2,-100; bonus bMaxSP,10; @@ -16579,44 +13602,6 @@ item_db: ( Refine: true Subtype: "W_STAFF" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" //bonus bAttack2,-150; bonus bMaxSP,20; @@ -16643,44 +13628,6 @@ item_db: ( Refine: true Subtype: "W_STAFF" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" //bonus bAttack2,-200; bonus bMaxSP,30; @@ -16707,44 +13654,6 @@ item_db: ( Refine: true Subtype: "W_STAFF" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" //bonus bAttack2,-250; bonus bMaxSP,40; @@ -16771,44 +13680,6 @@ item_db: ( Refine: true Subtype: "W_STAFF" Slots: 2 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" //bonus bAttack2,-300; bonus bMaxSP,50; @@ -16835,44 +13706,6 @@ item_db: ( Refine: true Subtype: "W_STAFF" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" //bonus bAttack2,-125; bonus bMatk,(BaseLevel-50)*2; @@ -16900,44 +13733,6 @@ item_db: ( Refine: true Subtype: "W_STAFF" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" //bonus bAttack2,-250; bonus bMatk,(BaseLevel-50)*2; @@ -16977,44 +13772,6 @@ item_db: ( Refine: true Subtype: "W_2HMACE" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Trade: { partneroverride: true notrade: true @@ -17046,44 +13803,6 @@ item_db: ( Refine: true Subtype: "W_2HMACE" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Trade: { partneroverride: true notrade: true @@ -17313,21 +14032,6 @@ item_db: ( Refine: true Subtype: "W_1HSWORD" Slots: 3 - AllowCards: { - id7403: 1 - id7404: 1 - id7405: 1 - id7406: 1 - id7407: 1 - id7408: 1 - id7409: 1 - id7410: 1 - id7411: 1 - id7412: 1 - id7413: 1 - id7414: 1 - id7419: 1 - } Trade: { notrade: true nodrop: true @@ -17357,21 +14061,6 @@ item_db: ( Refine: true Subtype: "W_2HMACE" Slots: 3 - AllowCards: { - id7403: 1 - id7404: 1 - id7405: 1 - id7406: 1 - id7407: 1 - id7408: 1 - id7409: 1 - id7410: 1 - id7411: 1 - id7412: 1 - id7413: 1 - id7414: 1 - id7419: 1 - } Trade: { notrade: true nodrop: true @@ -17405,21 +14094,6 @@ item_db: ( Refine: true Subtype: "W_BOW" Slots: 3 - AllowCards: { - id7403: 1 - id7404: 1 - id7405: 1 - id7406: 1 - id7407: 1 - id7408: 1 - id7409: 1 - id7410: 1 - id7411: 1 - id7412: 1 - id7413: 1 - id7414: 1 - id7419: 1 - } Trade: { notrade: true nodrop: true @@ -17451,21 +14125,6 @@ item_db: ( Refine: true Subtype: "W_STAFF" Slots: 3 - AllowCards: { - id7403: 1 - id7404: 1 - id7405: 1 - id7406: 1 - id7407: 1 - id7408: 1 - id7409: 1 - id7410: 1 - id7411: 1 - id7412: 1 - id7413: 1 - id7414: 1 - id7419: 1 - } Trade: { notrade: true nodrop: true @@ -17538,68 +14197,6 @@ item_db: ( Refine: true Subtype: "W_KATAR" Slots: 1 - AllowCards: { - id5022: 1 - id5023: 1 - id5024: 1 - id5025: 1 - id5026: 1 - id5027: 1 - id5028: 1 - id5029: 1 - id5037: 1 - id5038: 1 - id5039: 1 - id5040: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - id5041: 1 - id5042: 1 - id5043: 1 - id5044: 1 - id5045: 1 - id5046: 1 - id5047: 1 - id5048: 1 - id5049: 1 - id5050: 1 - id5051: 1 - id5052: 1 - id5053: 1 - id5054: 1 - id5055: 1 - id5056: 1 - id5057: 1 - id5058: 1 - id5059: 1 - id5060: 1 - id5061: 1 - id5062: 1 - id5063: 1 - id5064: 1 - } Script: <" bonus bFleeRate, -50; bonus bDefRate, -50; diff --git a/db/re/mob_db.conf b/db/re/mob_db.conf index e4bb502..4724cde 100644 --- a/db/re/mob_db.conf +++ b/db/re/mob_db.conf @@ -6099,8 +6099,7 @@ mob_db: ( Lv: 15 Hp: 1 Sp: 0 - Exp: 500 - JExp: 50 + Exp: 1 AttackRange: 1 Attack: [10, 10] Def: 5 @@ -6131,8 +6130,7 @@ mob_db: ( Lv: 20 Hp: 1 Sp: 0 - Exp: 1000 - JExp: 60 + Exp: 1 AttackRange: 1 Attack: [10, 10] Def: 15 diff --git a/maps/re/006-10.mcache b/maps/re/006-10.mcache index c9cddce..09f9a17 100644 Binary files a/maps/re/006-10.mcache and b/maps/re/006-10.mcache differ diff --git a/maps/re/026-2.mcache b/maps/re/026-2.mcache index 589618c..4e2e7d5 100644 Binary files a/maps/re/026-2.mcache and b/maps/re/026-2.mcache differ diff --git a/npc/001-3/_import.txt b/npc/001-3/_import.txt index 2118c10..38587a4 100644 --- a/npc/001-3/_import.txt +++ b/npc/001-3/_import.txt @@ -1,3 +1,4 @@ // Map 001-3: Dark Forest // This file is generated automatically. All manually added changes will be removed when running the Converter. +"npc/001-3/_warps.txt", "npc/001-3/ctrl.txt", diff --git a/npc/001-3/_warps.txt b/npc/001-3/_warps.txt new file mode 100644 index 0000000..99c9589 --- /dev/null +++ b/npc/001-3/_warps.txt @@ -0,0 +1,3 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Map 001-3: Dark Forest warps +001-3,164,32,0 warp #001-3_164_32 0,0,033-1,72,191 diff --git a/npc/003-6/_import.txt b/npc/003-6/_import.txt deleted file mode 100644 index 95f4096..0000000 --- a/npc/003-6/_import.txt +++ /dev/null @@ -1,5 +0,0 @@ -// Map 003-6: Laundry -// This file is generated automatically. All manually added changes will be removed when running the Converter. -"npc/003-6/_warps.txt", -"npc/003-6/cyndala.txt", -"npc/003-6/tamiloc.txt", diff --git a/npc/003-6/_warps.txt b/npc/003-6/_warps.txt deleted file mode 100644 index d540cc5..0000000 --- a/npc/003-6/_warps.txt +++ /dev/null @@ -1,4 +0,0 @@ -// This file is generated automatically. All manually added changes will be removed when running the Converter. -// Map 003-6: Laundry warps -003-6,40,39,0 warp #003-6_40_39 0,0,003-1,112,148 -003-6,32,39,0 warp #003-6_32_39 0,0,003-1,106,148 diff --git a/npc/003-6/cyndala.txt b/npc/003-6/cyndala.txt deleted file mode 100644 index 9dd039f..0000000 --- a/npc/003-6/cyndala.txt +++ /dev/null @@ -1,249 +0,0 @@ -// TMW2 Script. -// Author: -// Saulc -// Jesusalva -// Dye Quest added by: -// Povo -// Description: -// Will be with dye functions for a while... May be wrong. Only Card2 is available per hercules rules - -// Original code from evol -// Authors: -// Reid - -003-6,33,30,0 script Cyndala NPC_FEMALE_ARGAES,{ - function explain_dyes; - function item_is_bleachable; - function remove_cards_from_item; - function give_yellow_dye; - function deny_yellow_dye; - function craft_yellow_dye; - - mesn; - mesq l("Hello, darling!"); - mes ""; - - do - { - .@q = getq(TulimsharQuest_Cyndala); - select - l("Excuse me."), - l("Could you bleach my equipment?"), - l("What can you say about dyes?"), - rif(.@q > 0, l("I would like to order some dye.")), - rif(is_staff(), "Technical problem, gimme info about an item."); - - switch (@menu) { - case 2: - remove_cards_from_item(); - break; - case 3: - explain_dyes(); - break; - case 4: - craft_yellow_dye(); - break; - case 5: - .@item = requestitemindex(); - mes "Item index selected: " + str(.@item); - mes "slots=" + str(MAX_SLOTS); - for (.@i = 0; .@i < MAX_SLOTS; .@i++) - { - mes "slot " + str(.@i) + " = " + str(getcardbyindex(.@item, .@i)); - } - mes str(@inventorylist_card1[.@item]); - mes str(YellowDye); - mes "item options:"; - for (.@i = 0; .@i < 5; .@i ++) - { - mes sprintf("%d: Option: %d, Value: %d", .@i, getitemoptionidbyindex(.@item, .@i), - getitemoptionvaluebyindex(.@item, .@i)); - } - mes "Note named items (Card1 254 and 255) have Card3 and Card4 reserved"; - break; - default: - mes ""; - mesn; - mesq l("I wish you a good time in town."); - next; - break; - } - - } while (@menu != 1); - - - closeclientdialog; - goodbye; - close; - -///////////////////////////////////////////////////////////////////////////////// -function explain_dyes { - .@q = getq(TulimsharQuest_Cyndala); - speech S_FIRST_BLANK_LINE | S_LAST_NEXT, - l("Dyes are a special kind of ink to make certain objects fancier."), - l("Once you have the appropriate colorant for the item, ##bdrag the colorant##b to the material."), - l("Example:"), - l("Drag and drop a %s in a %s, and you will obtain a %s.", getitemlink(YellowDye), - getitemlink(ArtisTankTop), getitemlink(ArtisTankTop, YellowDye)), - l("Dye cards are not the only thing which exist, but they are the coolest!"); - if (.@q < 1) { - speech S_FIRST_BLANK_LINE | S_LAST_NEXT, - l("By the way, did you know that the official color of Tulimshar is yellow?"), - l("In fact, the Tulimshar Noble District is world-renowned for crafting high-quality yellow garments!"), - l("Normally I would offer to make you some %s, but economic problems in Halinarzo have caused a shortage of supplies...", - getitemlink(YellowDye)); - if (BaseLevel > 20 && - .@q < 1) { - speech S_FIRST_BLANK_LINE | S_LAST_NEXT, - l("Wait a minute! I have an idea!"), - l("You look like you have enough experience to know your way around town..."), - l("If you can manage to gather the supplies I need, I can surely craft some %s for you!", - getitemlink(YellowDye)), - l("Of course, I do charge a nominal fee of for the service. %s GP to be exact.", fnum(50)), - l("In addition to my fee, I will also need the following items:"); - mesq l("%d/%d %s", countitem(BottleOfSewerWater), 1, getitemlink(BottleOfSewerWater)); - mesq l("%d/%d %s", countitem(PiouFeathers), 50, getitemlink(PiouFeathers)); - next; - mesq l("I am sure that an adventurer like you can gather everything in no time at all!"); - setq TulimsharQuest_Cyndala, 1; - } - } -} - -function item_is_bleachable -{ - .@item_index = getarg(0); - if (.@item_index < 0) - return false; - - // Collect the item ID - delinventorylist(); - getinventorylist(); - .@x=@inventorylist_id[.@id]; - - // Debug info - if (is_staff()) - mesf "Item Index %d (%s) - ID %d", .@item_index, - getitemlink(@inventorylist_id[.@item_index]), - @inventorylist_id[.@item_index]; - - // No duplicates - if (countitem(.@x) > 1) { - mesc l("You are carrying duplicates of the same item. Sorry, but I have no idea which one you want to tweak."), 1; - return false; - } - - // Must have a card, d'oh - if (@inventorylist_card1[.@item_index] == 0) - return false; - - return true; -} - -function remove_cards_from_item -{ - .@item_index = -1; - - speech S_FIRST_BLANK_LINE, - l("What item would you like to bleach?"); - - narrator S_FIRST_BLANK_LINE | S_LAST_NEXT, - l("You can drag and drop an item to the NPC window or select an item through your inventory."); - - .@item_index = requestitemindex(); - if (!item_is_bleachable(.@item_index)) { - speech S_LAST_NEXT, - l("You should know this, an item like this can't be bleached."); - - return; - } - .@item_id = @inventorylist_id[.@item_index]; - - speech S_LAST_NEXT, - l("Your mind is set? You will probably lose all the dyes and/or cards during on the item during this process. You're bleaching a %s by the way.", getitemlink(.@item_id)); - - switch (askyesno()) { - case ASK_YES: - speech S_FIRST_BLANK_LINE | S_LAST_NEXT, - l("Ok, let me see..."), - l("..."); - - // FIXME: Register this on picklog - if (rand2(1, 800) > readparam2(bLuk)) { - failedremovecardsindex .@item_index, 1; - logmes("Deleted Cards from item: "+.@item_id); - } else { - successremovecardsindex(.@item_index); - logmes("Removed Cards from item: "+.@item_id); - } - - // First option slot of weapon: Raises STR in 5 - // setequipoption(EQI_HAND_R, 1, VAR_STRAMOUNT, 5); - // This is an option :3 - - speech S_LAST_NEXT | S_NO_NPC_NAME, - l("..."), - l("Here it is, clean like a whistle!"); - break; - default: - speech S_FIRST_BLANK_LINE | S_LAST_NEXT, - l("Is it truly a hard choice to make?"); - break; - } - return; -} - -function give_yellow_dye { - .@q = getq(TulimsharQuest_Cyndala); - - inventoryplace YellowDye, 1, EmptyBottle, 1; - Zeny = Zeny - 50; - delitem BottleOfSewerWater, 1; - delitem PiouFeathers, 50; - - mesn; - mesq l("Here you are, you won't find a dye more yellow than this!"); - getitem(YellowDye, 1); - getitem(EmptyBottle, 1); - - if (.@q == 1) { - setq TulimsharQuest_Cyndala, 2; - getexp 80, 0; - } - return; -} - -function deny_yellow_dye { - mesn; - mesc l("I am sorry, but it does not look like you have everything. You will need to bring:"); - next; - mesc l("%d/%d %s", countitem(BottleOfSewerWater), 1, getitemlink(BottleOfSewerWater)); - mesc l("%d/%d %s", countitem(PiouFeathers), 50, getitemlink(PiouFeathers)); - mesc l("%s/%s GP", fnum(Zeny), fnum(50)); - next; - return; -} - -function craft_yellow_dye { - if (countitem(BottleOfSewerWater) < 1 || - countitem(PiouFeathers) < 50 || - Zeny < 50) - deny_yellow_dye(); - else - give_yellow_dye(); - return; -} - -OnInit: - .@npcId = getnpcid(.name$); - setunitdata(.@npcId, UDT_HEADTOP, NPCEyesD); - setunitdata(.@npcId, UDT_HEADMIDDLE, ValentineDress); //TODO - setunitdata(.@npcId, UDT_HEADBOTTOM, CottonTrousers); - setunitdata(.@npcId, UDT_WEAPON, DeepBlackBoots); // Boots - setunitdata(.@npcId, UDT_HAIRSTYLE, 16); - setunitdata(.@npcId, UDT_HAIRCOLOR, 11); - - .sex = G_FEMALE; - .distance = 5; - end; -} diff --git a/npc/003-6/tamiloc.txt b/npc/003-6/tamiloc.txt deleted file mode 100644 index 6f88398..0000000 --- a/npc/003-6/tamiloc.txt +++ /dev/null @@ -1,83 +0,0 @@ -// TMW2 scripts. -// Authors: -// Saulc -// Jesusalva -// Reid -// Travolta -// Description: -// Tamiloc is the barber. - -003-6,46,30,0 script Tamiloc NPC_ELVEN_FEMALE_ARMOR_SHOP,{ - function setRace { - clear; - setnpcdialogtitle l("%s - Modify Race", .name$); - mes l("Race") + ": " + get_race(); - next; - mes l("Please select the desired race."); - select - l("Kaizei Human"), - l("Argaes Human"), - l("Tonori Human"), - l("Elf"), - l("Orc"), - l("Raijin"), - l("Tritan"), - l("Ukar"), - l("Redy"), - l("Savior"); - switch (@menu) - { - default: - jobchange max(0, @menu-1); - } - return; - } - - - mesn; - mesq l("Hi! Do you want a hair cut?"); - - do - { - select - l("What is my current hairstyle and hair color?"), - l("I'd like to get a different style."), - l("Can you do something with my color?"), - rif(is_gm() || REBIRTH >= 5, l("I want to change my Race!")), - l("I'm fine for now, thank you."); - - switch (@menu) - { - case 1: - BarberSayStyle 3; - break; - case 2: - BarberChangeStyle; - speech S_FIRST_BLANK_LINE | S_LAST_NEXT, - l("Enjoy your new style."); - l("Anything else?"); - break; - case 3: - BarberChangeColor; - speech S_FIRST_BLANK_LINE | S_LAST_NEXT, - l("I hope you like this color."); - l("Anything else?"); - break; - case 4: - setRace; - break; - case 5: - speech S_FIRST_BLANK_LINE | S_LAST_NEXT, - l("Feel free to come visit me another time."); - - goodbye; - } - } while (1); - close; - - -OnInit: - .sex = G_FEMALE; - .distance = 5; - end; -} diff --git a/npc/006-10/_config.txt b/npc/006-10/_config.txt new file mode 100644 index 0000000..333acee --- /dev/null +++ b/npc/006-10/_config.txt @@ -0,0 +1,128 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Map 006-10: Fefe's Crypt conf + +006-10,68,50,0 script #006-10_68_50 NPC_TRAP,0,0,{ + mesn strcharinfo(0); + mesq l("Something seems off with that!"); + close; +OnTouch: +OnTouchNPC: + IronTrap(80, 15, 1); + end; +OnTimer15000: + stopnpctimer; setnpctimer 0; setnpcdisplay "#006-10_68_50", NPC_TRAP; end; +} + +006-10,70,51,0 script #006-10_70_51 NPC_TRAP,0,0,{ + mesn strcharinfo(0); + mesq l("Something seems off with that!"); + close; +OnTouch: +OnTouchNPC: + IronTrap(80, 15, 1); + end; +OnTimer15000: + stopnpctimer; setnpctimer 0; setnpcdisplay "#006-10_70_51", NPC_TRAP; end; +} + +006-10,72,49,0 script #006-10_72_49 NPC_TRAP,0,0,{ + mesn strcharinfo(0); + mesq l("Something seems off with that!"); + close; +OnTouch: +OnTouchNPC: + IronTrap(80, 15, 1); + end; +OnTimer15000: + stopnpctimer; setnpctimer 0; setnpcdisplay "#006-10_72_49", NPC_TRAP; end; +} + +006-10,73,52,0 script #006-10_73_52 NPC_TRAP,0,0,{ + mesn strcharinfo(0); + mesq l("Something seems off with that!"); + close; +OnTouch: +OnTouchNPC: + IronTrap(80, 15, 1); + end; +OnTimer15000: + stopnpctimer; setnpctimer 0; setnpcdisplay "#006-10_73_52", NPC_TRAP; end; +} + +006-10,75,49,0 script #006-10_75_49 NPC_TRAP,0,0,{ + mesn strcharinfo(0); + mesq l("Something seems off with that!"); + close; +OnTouch: +OnTouchNPC: + IronTrap(80, 15, 1); + end; +OnTimer15000: + stopnpctimer; setnpctimer 0; setnpcdisplay "#006-10_75_49", NPC_TRAP; end; +} + +006-10,50,27,0 script #006-10_50_27 NPC_TRAP,0,0,{ + mesn strcharinfo(0); + mesq l("Something seems off with that!"); + close; +OnTouch: + IronTrap(30, 15, 1); + end; +OnTimer15000: + stopnpctimer; setnpctimer 0; setnpcdisplay "#006-10_50_27", NPC_TRAP; end; +} + +006-10,50,28,0 script #006-10_50_28 NPC_TRAP,0,0,{ + mesn strcharinfo(0); + mesq l("Something seems off with that!"); + close; +OnTouch: + IronTrap(30, 15, 1); + end; +OnTimer15000: + stopnpctimer; setnpctimer 0; setnpcdisplay "#006-10_50_28", NPC_TRAP; end; +} + +006-10,52,27,0 script #006-10_52_27 NPC_TRAP,0,0,{ + mesn strcharinfo(0); + mesq l("Something seems off with that!"); + close; +OnTouch: + IronTrap(30, 15, 1); + end; +OnTimer15000: + stopnpctimer; setnpctimer 0; setnpcdisplay "#006-10_52_27", NPC_TRAP; end; +} + +006-10,52,28,0 script #006-10_52_28 NPC_TRAP,0,0,{ + mesn strcharinfo(0); + mesq l("Something seems off with that!"); + close; +OnTouch: + IronTrap(30, 15, 1); + end; +OnTimer15000: + stopnpctimer; setnpctimer 0; setnpcdisplay "#006-10_52_28", NPC_TRAP; end; +} + +006-10,54,27,0 script #006-10_54_27 NPC_TRAP,0,0,{ + mesn strcharinfo(0); + mesq l("Something seems off with that!"); + close; +OnTouch: + IronTrap(30, 15, 1); + end; +OnTimer15000: + stopnpctimer; setnpctimer 0; setnpcdisplay "#006-10_54_27", NPC_TRAP; end; +} + +006-10,54,28,0 script #006-10_54_28 NPC_TRAP,0,0,{ + mesn strcharinfo(0); + mesq l("Something seems off with that!"); + close; +OnTouch: + IronTrap(30, 15, 1); + end; +OnTimer15000: + stopnpctimer; setnpctimer 0; setnpcdisplay "#006-10_54_28", NPC_TRAP; end; +} diff --git a/npc/006-10/_import.txt b/npc/006-10/_import.txt index 4c0c28f..72ca523 100644 --- a/npc/006-10/_import.txt +++ b/npc/006-10/_import.txt @@ -1,5 +1,6 @@ // Map 006-10: Fefe's Crypt // This file is generated automatically. All manually added changes will be removed when running the Converter. +"npc/006-10/_config.txt", "npc/006-10/_mobs.txt", "npc/006-10/_warps.txt", "npc/006-10/logic.txt", diff --git a/npc/006-10/_mobs.txt b/npc/006-10/_mobs.txt index 16b27b7..9575b1a 100644 --- a/npc/006-10/_mobs.txt +++ b/npc/006-10/_mobs.txt @@ -1,3 +1,5 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Map 006-10: Fefe's Crypt mobs 006-10,54,44,24,24 monster Vampire Bat 1063,18,300000,30000 +006-10,73,28,3,1 monster Vicious Chest 1148,1,10000,10000 +006-10,71,26,3,1 monster Evil Chest 1149,1,10000,10000 diff --git a/npc/006-10/logic.txt b/npc/006-10/logic.txt index 601563d..f662b2d 100644 --- a/npc/006-10/logic.txt +++ b/npc/006-10/logic.txt @@ -2,129 +2,430 @@ // Author: // Jesusalva // Description: -// Crazyfefe's Shrine +// Crazyfefe's Shrine (remastered) 006-10 mapflag zone MMO +026-2 mapflag zone MMO // We need to refactor this warp system, replace NPC_HIDDEN, and include the boss +006-10,54,58,0 script Blanc NPC_BLANC,{ + if (getunittype(.blanc) >= 0) end; + mesc l("Isn't that Blanc? Should we attempt to capture him?"); + mesc l("Advised: 6+ players"), 1; + mesc l("Advised: 1+ mage, 1+ tanker, 2+ healers"), 1; + mesc l("No Time Limit"), 1; + mesc l("Enter/Leave after start: %s", b(l("YES"))), 1; + next; + select + l("Not yet."), + l("Bring it on!"), + rif(is_gm(), l("Bring me, my worst nightmare.")); + mes ""; + if (@menu == 1) { + closeclientdialog; + close; + } + if (@menu == 2) + .hard = false; + else + .hard = true; -006-10,46,45,0 script #00610WA NPC_HIDDEN,0,3,{ - end; -OnTouch: - slide 53, 46; end; -} + // Create the boss + .blanc = monster("006-10", 54, 61, "Blanc Halifax", Blanc, 1); + .@mlt = (.hard ? 15 : 10); -006-10,58,45,0 script #00610WB NPC_HIDDEN,0,3,{ - end; -OnTouch: - slide 54, 38; end; -} + // Basic attributes + .maxhp = (750000 * .@mlt / 10); // 750k ~ 1250k + setunitdata(.blanc, UDT_MAXHP, .maxhp); + setunitdata(.blanc, UDT_HP, .maxhp); + setunitdata(.blanc, UDT_ATKRANGE, (.hard ? 7 : 6)); -006-10,49,38,0 script #00610WC NPC_HIDDEN,0,3,{ - end; -OnTouch: - slide 42, 40; end; -} + // Reconfigure the AI + .@opt=getunitdata(.blanc, UDT_MODE); + // Disable looting + if (.@opt & MD_LOOTER) + .@opt=.@opt^MD_LOOTER; + // Add knockback immunity + .@opt=.@opt|MD_NOKNOCKBACK; + // Mark as boss + .@opt=.@opt|MD_BOSS; + // Mark as aggressive + .@opt=.@opt|MD_AGGRESSIVE; + .@opt=.@opt|MD_ANGRY; + // Make it more op + .@opt=.@opt|MD_DETECTOR; + .@opt=.@opt|MD_CASTSENSOR_CHASE; + .@opt=.@opt|MD_CASTSENSOR_IDLE; + .@opt=.@opt|MD_CHANGECHASE; + .@opt=.@opt|MD_CHANGETARGET_MELEE; + .@opt=.@opt|MD_CHANGETARGET_CHASE; + setunitdata(.blanc, UDT_MODE, .@opt); -006-10,55,37,0 script #00610WD NPC_HIDDEN,0,3,{ - end; -OnTouch: - slide 45, 46; end; -} + // Nerf the damage, but never miss a hit + setunitdata(.blanc, UDT_ATKMIN, 60 * .@mlt / 10); // 60~90 dmg + setunitdata(.blanc, UDT_ATKMAX, 60 * .@mlt / 10); + setunitdata(.blanc, UDT_ADELAY, 2220 / .@mlt * 10); // 2220 or 1480ms + setunitdata(.blanc, UDT_HIT, 2400); -006-10,44,39,0 script #00610WE NPC_HIDDEN,0,3,{ - end; -OnTouch: - slide 50, 38; end; -} + // Boosting the defense is not necessary + // It nerfs weapons to 40% (bows to 20%) + // Then it resists 50% of Neutral element. + // Note it is strong against Water (25% dmg) + // And weak against Fire (snow) and Wind (100% dmg) + // Otherwise, behave as Ghost element -006-10,38,39,0 script #00610WF NPC_HIDDEN,0,3,{ - end; -OnTouch: - slide 35, 35; end; -} + // Make Blanc damn hard to damage until his reinforcements appear + sc_start SC_PRESTIGE, 5000, 120000, 10000, SCFLAG_NOAVOID|SCFLAG_FIXEDTICK|SCFLAG_FIXEDRATE, .blanc; + // TODO: Defense and attributes are wrong? + disablenpc .name$; + initnpctimer; + closeclientdialog; + close; -006-10,30,34,0 script #00610WG NPC_HIDDEN,0,3,{ +OnRw: + dispbottom l("Mission accomplished. Well played!"); + // Mark as "done" on Mirror Lake Quest Tracker + ##01_CRQUEST = ##01_CRQUEST | MLP_CR_DEBUT; + specialeffect(FX_FANFARE, AREA, getcharid(3)); + sleep2(15000); + $@EVENT_08 = PORTHOS_UNUSED; + warp("033-1", 72, 191); end; -OnTouch: - slide 33, 25; end; -} -006-10,38,24,0 script #00610WH NPC_HIDDEN,0,3,{ +// Fail-safe Mechanism (will never happen) +OnTimer60000: + consolebug("Warning! final fail-safe mechanism triggered to Blanc."); + initnpctimer; end; -OnTouch: - slide 45, 22; end; -} +OnTimer25000: +OnTimer15000: + consolewarn("Warning, fail-safe mechanism triggered to Blanc."); +// This is the boss' core +OnTimer5000: + /* Regeneration & Defeat Loop */ + .@end = false; + // FIXME: Don't check the WHOLE map, just the current platform? + if (!getmapusers("006-10")) { + .@hp = getunitdata(.blanc, UDT_HP); + .@mh = .maxhp; + .@hp = max(.@mh, .@hp + (.@mh / 500)); // Regenerates 0.2% HP + // Fully healed, players lost + if (.@hp >= .@mh) + .@end = true; + // Regeneration + setunitdata(.blanc, UDT_HP, .@hp); + } -006-10,50,21,0 script #00610WI NPC_HIDDEN,0,3,{ - end; -OnTouch: - slide 57, 29; end; -} + /* Maybe the fight is over */ + if (!mobcount("006-10", "all") || getunittype(.blanc) < 0) { + $@EVENT_08 = PORTHOS_BUSY; + maptimer2("006-10", 10, "Blanc::OnRw"); + } + if (!mobcount("006-10", "all") || getunittype(.blanc) < 0 || .@end) { + killmonsterall("006-10"); + enablenpc .name$; + kamibroadcast("The battle is over!", "Blanc Showdown"); + .beats = 0; + stopnpctimer; + end; + } -006-10,52,28,0 script #00610WJ NPC_HIDDEN,0,3,{ - end; -OnTouch: - slide 45, 31; end; -} + /* Move platform according to HP threshold */ + .@hp = getunitdata(.blanc, UDT_HP) * 10 / .maxhp; + .@state = 9 - limit(0, .@hp, 9); // The platform ID they should be on + debugmes "HP %d / %d (%d%%) (S %d/%d) [%03d@%d]", getunitdata(.blanc, UDT_HP), .maxhp, .@hp, .@state, .state, .beats, .blanc; + if (.state != .@state) { + unittalk(.blanc, "Damn, you guys are tough! I must fall back!"); + sleep(100); + unitwarp(.blanc, "006-10", $@BLANC_X[.@state], $@BLANC_Y[.@state]); + sleep(100); + unittalk(.blanc, "Outta the way!"); + .state = .@state; + } -006-10,40,30,0 script #00610WK NPC_HIDDEN,0,3,{ - end; -OnTouch: - slide 37, 25; end; -} + /* Prepare some combat data */ + // TODO: Maybe not universal? Maybe we should impose a range? + getmapxy(.@m$, .@x, .@y, UNITTYPE_MOB, .blanc); + .@c=getunits(BL_PC, .@pcs, MAX_CYCLE_PC, .@m$); + .@mvp=0;.@rnd=0;.@def=-1; + for (.@i = 0; .@i < .@c; .@i++) { + if (!.@rnd || !rand2(.@c)) + .@rnd=.@pcs[.@i]; + if (readbattleparam(.@pcs[.@i], UDT_DEF) > .@def) { + if (readparam(Hp, .@pcs[.@i]) < 1) continue; + .@mvp=.@pcs[.@i]; + .@def=readbattleparam(.@pcs[.@i], UDT_DEF); + } + } + .beats += 1; -006-10,32,24,0 script #00610WL NPC_HIDDEN,0,3,{ - end; -OnTouch: - slide 31, 46; end; -} + /* Everyone is dead, get rid of their corpses */ + if (!.@mvp || !.@rnd) { + mapwarp("006-10", "033-1", 72, 191); + initnpctimer; + end; + } -006-10,36,45,0 script #00610WM NPC_HIDDEN,0,3,{ - end; -OnTouch: - slide 41, 46; end; -} + //debugmes "----------- Skill Loop, beat is %d", .beats % 18; + /* Decide the skill to use based on ~5s beats over 3 minutes */ + switch (.beats % 18) { + // (1/6) Summon Reinforcements (every 60s) + case 1: + case 7: + case 13: + unittalk(.blanc, "Come forth, ##BHalifax's Crew##b, do not let these fools arrest your captain!"); + specialeffect(FX_MGWARP, AREA, .blanc); // Maybe 65 would also work + sleep(1000); + // Default amount: Half players + Half magnifying HP + .@max = (getmapusers("006-10")/2) + (max(1, (11 - .@hp) / 10)/2); + // Keep boundaries: Never less than 1, never more than 10 + .@max = limit(1, .@max, 10); + for (.@i=0; .@i < .@max; .@i++) { + .@mob = any(Thug, Grenadier, Swashbuckler); + monster(.@m$, .@x, .@y, strmobinfo(1, .@mob), .@mob, 1); + } + break; + // (2/6) Tanker (~30s) + case 0: + case 4: + case 6: + case 10: + case 12: + case 16: + specialeffect(FX_ATTACK, AREA, .blanc); + sleep(1000); + if (.@hp < 3) { + // Third Attack Pattern: Judgment + unittalk(.blanc, sprintf("%s cannot stop me! ##BElectric Judgment##b!", strcharinfo(0, "cursed player", .@mvp))); + .@PW=240; .@SPW=60; .@RG=3; + } else if (.@hp < 7) { + // Second Attack Pattern: Holy Light + unittalk(.blanc, sprintf("%s, I'll show you no mercy! ##BThunder Bolt##b!", strcharinfo(0, "cursed player", .@mvp))); + .@PW=125; .@SPW=25; .@RG=1; + } else { + // First Attack Pattern: Napalm Beat + unittalk(.blanc, sprintf("This battle is over, %s! ##BThunder Neddle##b!", strcharinfo(0, "cursed player", .@mvp))); + .@PW=35; .@SPW=5; .@RG=2; + } + .@mtk = calcdmg(.blanc, .@mvp, HARM_MAGI); + .@dmg = .@mtk * .@PW / 100; + .@dsb = .@mtk * .@SPW / 100; + sleep(1000); + specialeffect(FX_LIGHTNING, AREA, .@mvp); + areaharm(.@mvp, .@RG, .@dsb, HARM_MAGI, Ele_Wind, "filter_always", BL_PC|BL_MER|BL_HOM); + harm(.@mvp, .@dmg, HARM_MAGI, Ele_Holy); + break; + // (3/6) Random Target (~60s) + case 2: + case 8: + case 14: + specialeffect(FX_SMOKE, AREA, .blanc); + sleep(1000); + .@time=rand2(18000, 36000) + 10000 - (.@hp * 1000); + // Switch between curse and disable + if (any(true,false)) { + unittalk(.blanc, sprintf("I hereby ##Bcurse##b you, %s!", strcharinfo(0, "cursed player", .@rnd))); + sc_start(SC_CURSE, .@time, 1, 10000, SCFLAG_FIXEDRATE, .@rnd); + } else { + unittalk(.blanc, sprintf("I shall ##Bdisable##b you, %s!", strcharinfo(0, "cursed player", .@rnd))); + sc_start(SC_BLIND, .@time / 2, 1, 10000, SCFLAG_FIXEDRATE, .@rnd); + sc_start(SC_SILENCE, .@time / 2, 1, 10000, SCFLAG_FIXEDRATE, .@rnd); + } + // Second pattern: Bleeding ON + if (.@hp < 7) { + sc_start(SC_BLOODING, 10000, 1, 9000-(.@hp*1000), SCFLAG_FIXEDRATE, .@rnd); + } + specialeffect(FX_LIGHTNING, AREA, .@rnd); + break; + // (4/6) Traps (~60s) + case 3: + case 9: + case 15: + // Determine if there'll be 4 or 2 AoE explosions + .@extra = (.@hp < 5 || .hard); + // Coordinates are between origin and Blanc + // ID 3 and ID 6 were disabled - the platforms are small + .@mx=$@BLANC_X[.@state]; + .@my=$@BLANC_Y[.@state]; + .@x1=rand2(.@mx, .@x); .@x2=rand2(.@mx, .@x); + .@y1=rand2(.@my, .@y); .@y2=rand2(.@my, .@y); + // TODO: Maybe replace Dummy/EnergyBall with an invisible monster? + .@t1=monster("006-10", .@x1, .@y1, "", EnergyBall, 1); + .@t2=monster("006-10", .@x2, .@y2, "", EnergyBall, 1); + specialeffect(67, AREA, .@t1); + specialeffect(67, AREA, .@t2); + immortal(.@t1); immortal(.@t2); + if (.@extra) { + .@x4=rand2(.@mx, .@x); .@x5=rand2(.@mx, .@x); + .@y4=rand2(.@my, .@y); .@y5=rand2(.@my, .@y); + .@t4=monster("006-10", .@x1, .@y1, "", EnergyBall, 1); + .@t5=monster("006-10", .@x2, .@y2, "", EnergyBall, 1); + specialeffect(67, AREA, .@t4); + specialeffect(67, AREA, .@t5); + immortal(.@t4); immortal(.@t5); + } + sleep(1500); + // This is just a prop + specialeffect(FX_LIGHTNING, AREA, .@t1); + specialeffect(FX_LIGHTNING, AREA, .@t2); + if (.@extra) { + specialeffect(FX_LIGHTNING, AREA, .@t4); + specialeffect(FX_LIGHTNING, AREA, .@t5); + } + sleep(500); + specialeffect(FX_CRITICAL, AREA, .@t1); + specialeffect(FX_CRITICAL, AREA, .@t2); + if (.@extra) { + specialeffect(FX_CRITICAL, AREA, .@t4); + specialeffect(FX_CRITICAL, AREA, .@t5); + } + areaharm(.@t1, 1, 450, HARM_MISC, Ele_Neutral, "filter_always", BL_PC|BL_MER|BL_HOM); + areaharm(.@t2, 1, 450, HARM_MISC, Ele_Neutral, "filter_always", BL_PC|BL_MER|BL_HOM); + if (.@extra) { + areaharm(.@t4, 1, 450, HARM_MISC, Ele_Neutral, "filter_always", BL_PC|BL_MER|BL_HOM); + areaharm(.@t5, 1, 450, HARM_MISC, Ele_Neutral, "filter_always", BL_PC|BL_MER|BL_HOM); + } + sleep(1000); + // FIXME: M+ fails to remove them, need @refresh (maybe @refreshall?) + // NOTE: The effect Nº 67 (halo circle) is also not cleaned by M+ + unitkill(.@t1); unitkill(.@t2); + if (.@extra) { + unitkill(.@t4); unitkill(.@t5); + } + break; + // (5/6) Weak AOE (~60s) + case 5: + case 11: + case 17: + specialeffect(60, AREA, .blanc); + sleep(500); + switch (rand2(3)) { + case 1: + unittalk(.blanc, "Cease! I shall ##Bpoison##b all of you!"); + .@sc = (.@hp < 1 ? SC_DPOISON : SC_POISON); + break; + case 2: + unittalk(.blanc, "Cease! I shall ##Bhurt##b all of you!"); + .@sc = SC_BLOODING; + break; + case 3: + unittalk(.blanc, "Cease! I shall ##Bsilence##b all of you!"); + .@sc = SC_SILENCE; + break; + default: + unittalk(.blanc, "Cease! I shall ##Bcripple##b all of you!"); + .@sc = SC_BLIND; + break; + } + areasc((.hard ? 7 : 5), 30000, .@sc, BL_PC|BL_HOM|BL_MER, 1, "filter_always", .blanc, 95000); + areaharm(.blanc, (.hard ? 7 : 5), 100, HARM_MAGI, Ele_Wind, "filter_always", BL_PC|BL_MER|BL_HOM); + // Forces everyone to sit, for cosmetic effect + areasc(18, 500, SC_BANANA_BOMB_SITDOWN_POSTDELAY, BL_PC|BL_HOM|BL_MER, 1, "filter_always", .blanc); + break; + } + // Strong AOE: Every 3 minutes (case = 0) + // Stalls all other skills for a while + if (.beats % 18 == 0) { + specialeffect(66, AREA, .blanc); + unittalk(.blanc, "I am Blanc, Halifax's captain!"); + sleep((.hard ? 1000 : 1500)); + specialeffect(700, AREA, .blanc); + unittalk(.blanc, "I'll never be caught by your ilk alive!"); + sleep((.hard ? 1000 : 1500)); + specialeffect(700, AREA, .blanc); + if (.@hp < 3) { + unittalk(.blanc, "Perish! ##BRage of Hungry Thunder##b!"); + .@dmg=rand2(900, 1100); + areasc3((.hard ? 5 : 4), 11000, SC_STOMACHACHE, BL_PC|BL_HOM|BL_MER, (.hard ? 20 : 15), "filter_always", .blanc, 6000); + areasc(6, 10000, SC_BLIND, BL_PC|BL_HOM|BL_MER, 1, "filter_always", .blanc, 2000); + } else if (.@hp < 7) { + unittalk(.blanc, "Perish! ##BVoracious Thunder Storm##b!"); + .@dmg=rand2(650, 900); + areasc3((.hard ? 4 : 3), 11000, SC_STOMACHACHE, BL_PC|BL_HOM|BL_MER, (.hard ? 15 : 10), "filter_always", .blanc, 4500); + } else { + unittalk(.blanc, "Perish! ##BEletric Needles##b!"); + .@dmg=rand2(400, 650); + } + /* Three blocks */ + specialeffect(66, AREA, .blanc); + areaharm(.blanc, (.hard ? 7 : 5), .@dmg, HARM_MAGI, Ele_Fire, "filter_always", BL_PC|BL_MER|BL_HOM); + sleep(500); + specialeffect(66, AREA, .blanc); + areaharm(.blanc, (.hard ? 15 : 10), .@dmg, HARM_MAGI, Ele_Holy, "filter_always", BL_PC|BL_MER|BL_HOM); + sleep(500); + specialeffect(66, AREA, .blanc); + specialeffect(FX_LIGHTNING, AREA, .blanc); + areaharm(.blanc, (.hard ? 24 : 18), .@dmg, HARM_MAGI, Ele_Wind, "filter_always", BL_PC|BL_MER|BL_HOM); + areasc((.hard ? 24 : 18), .@dmg*rand2(50, 100), SC_FROSTMISTY, BL_PC|BL_HOM|BL_MER, 1, "filter_always", .blanc, 10001 - (.@hp * 1000)); // SC_FROSTMISTY - General crippling + } -006-10,30,45,0 script #00610WN NPC_HIDDEN,0,3,{ - end; -OnTouch: - slide 57, 46; end; -} -// -------------------------------------------------- -006-10,52,45,0 script #00610WO NPC_HIDDEN,0,3,{ + initnpctimer; end; -OnTouch: - slide 45, 46; end; -} -006-10,40,45,0 script #00610WP NPC_HIDDEN,0,3,{ - end; -OnTouch: - slide 35, 35; end; -} +OnInit: + .distance = 4; + .beats = 0; // Skill cooldown timer + .hard = 0; // Hard mode (for GMs) + .blanc = 0; // Boss GID + .state = 0; // Current platform ID + .maxhp = 0; // Blanc's max HP (getunitdata(.blanc, UDT_MAXHP) is broken) -006-10,36,34,0 script #00610WQ NPC_HIDDEN,0,3,{ - end; -OnTouch: - slide 40, 40; end; -} + // TODO: In general, we have no idea of platforms size + setarray $@BLANC_X, 53, 72, 71, 72, 52, 36, 34, 35, 35, 52; + setarray $@BLANC_Y, 63, 67, 53, 30, 30, 27, 48, 36, 63, 36; -006-10,58,28,0 script #00610WR NPC_HIDDEN,0,3,{ + // .@index = miller_rand(.@state, getcharid(0), 10); end; -OnTouch: - slide 49, 22; end; } -006-10,46,30,0 script #00610WS NPC_HIDDEN,0,3,{ +// Below be the warp system. Rightmost forwards, leftmost rewinds. + +006-10,51,64,0 script #00610XX NPC_HIDDEN,1,0,{ end; OnTouch: - slide 53, 29; end; + // Now... WTF are we on miller rand? + if (!@miller_fix) { + for (.@i=0;.@i<10;.@i++) { + if (miller_rand(.@i, getcharid(0), 10) == 0) { + @miller_fix = .@i; + break; + } + } + } + // Set "@state" properly + @state = @miller_fix; + end; } - -006-10,44,21,0 script #00610WT NPC_HIDDEN,0,3,{ +006-10,57,61,0 script #00610WA+ NPC_FANCY_CIRCLE,0,0,{ end; OnTouch: - slide 37, 25; end; + // All portals are the same, anyway + if (compare(strnpcinfo(2), "+")) + @state = ((@state+1) % 10); // Technically, the loop is not needed + else + @state = ((@state-1) % 10); // Technically, this loop is not needed + .@index = miller_rand(@state, getcharid(0), 10); + slide $@BLANC_X[.@index], $@BLANC_Y[.@index]; + end; } +// NOTE: Vampire Bats are aggressive, they're tasked in disposing non-fighters +006-10,49,60,0 duplicate(#00610WA+) #00610WA- NPC_FANCY_CIRCLE,0,0 +006-10,75,65,0 duplicate(#00610WA+) #00610WB+ NPC_FANCY_CIRCLE,0,0 +006-10,68,64,0 duplicate(#00610WA+) #00610WB- NPC_FANCY_CIRCLE,0,0 +006-10,75,50,0 duplicate(#00610WA+) #00610WC+ NPC_FANCY_CIRCLE,0,0 +006-10,67,49,0 duplicate(#00610WA+) #00610WC- NPC_FANCY_CIRCLE,0,0 +006-10,76,27,0 duplicate(#00610WA+) #00610WD+ NPC_FANCY_CIRCLE,0,0 +006-10,68,26,0 duplicate(#00610WA+) #00610WD- NPC_FANCY_CIRCLE,0,0 +006-10,56,27,0 duplicate(#00610WA+) #00610WE+ NPC_FANCY_CIRCLE,0,0 +006-10,48,26,0 duplicate(#00610WA+) #00610WE- NPC_FANCY_CIRCLE,0,0 +006-10,40,24,0 duplicate(#00610WA+) #00610WF+ NPC_FANCY_CIRCLE,0,0 +006-10,32,24,0 duplicate(#00610WA+) #00610WF- NPC_FANCY_CIRCLE,0,0 +006-10,37,51,0 duplicate(#00610WA+) #00610WG+ NPC_FANCY_CIRCLE,0,0 +006-10,30,45,0 duplicate(#00610WA+) #00610WG- NPC_FANCY_CIRCLE,0,0 +006-10,41,33,0 duplicate(#00610WA+) #00610WH+ NPC_FANCY_CIRCLE,0,0 +006-10,30,33,0 duplicate(#00610WA+) #00610WH- NPC_FANCY_CIRCLE,0,0 +006-10,44,63,0 duplicate(#00610WA+) #00610WI+ NPC_FANCY_CIRCLE,0,0 +006-10,35,57,0 duplicate(#00610WA+) #00610WI- NPC_FANCY_CIRCLE,0,0 +006-10,55,37,0 duplicate(#00610WA+) #00610WJ+ NPC_FANCY_CIRCLE,0,0 +006-10,49,37,0 duplicate(#00610WA+) #00610WJ- NPC_FANCY_CIRCLE,0,0 diff --git a/npc/017-3/gambler.txt b/npc/017-3/gambler.txt deleted file mode 100644 index 7d5c848..0000000 --- a/npc/017-3/gambler.txt +++ /dev/null @@ -1,165 +0,0 @@ -// TMW2 Scripts -// Author: -// Jesusalva -// Description: -// Gambler: Can you remember the sequence? - -017-3,23,38,0 script Gambler#017-3 NPC_PLAYER,{ - function colorname { - switch (getarg(0)) { - case 1: - return "Green"; break; - case 2: - return "Blue"; break; - case 3: - return "Red"; break; - case 4: - return "Yellow"; break; - case 5: - return "Exit"; break; - default: - return l("ERROR: %d", getarg(0)); - } - } - - goto L_Menu; - -L_Menu: - showavatar NPC_FLOPPED_NOBLEMAN; - mesn; - mesc l("Gambling is for the weak, I offer you a true game!"); - mesc l("You need %d %s. I'll start showing you sequences of colors.", .price, getitemlink(CasinoCoins)); - mesc l("The farther you go on the sequence, the better the payout!"); - next; - menu - rif(countitem(CasinoCoins) >= .price, l("Let's play!")), L_Start, - l("Information"), L_Info, - l("Leave"), -; - close; - -L_Info: - mes ""; - mesc l("Rules:"); - mesc l("A color sequence will be displayed on the avatar frame."); - mesc l("You must then repeat the sequence at the board which will show."); - next; - mesc l("Prizes:"); - mesc l("You'll get %d GP every time you finish the sequence.", .prize); - next; - mesc l("Winning Strike Prizes:"); - mesc l("Every %d sequences, you'll get a %s!", 10, getitemlink(StrangeCoin)); - mesc l("If you get %d sequence, you'll get a %s!", 30, getitemlink(BronzeGift)); - mesc l("If you get %d sequence, you'll get a %s!", 50, getitemlink(SilverGift)); - //mesc l("If you get %d sequence, you'll get a %s!", 50, getitemlink(GoldenGift)); - next; - goto L_Menu; - - -L_Start: - showavatar AVATAR_SEQBOARD; - mesc l("Pay attention to the sequence!"); - next; - delitem CasinoCoins, .price; - deletearray(@sequence); - @streak=0; - -L_Sequence: - // Configure - setnpcdialogtitle l("Memorize the sequence!"); - array_push(@sequence, 1+rand2(4)); - sleep2(1000); - - // Display - freeloop(true); - for (.@i=0;.@i < getarraysize(@sequence);.@i++) { - showavatar 1200+@sequence[.@i]; - sleep2(1200-(@streak*20)); - } - freeloop(false); - - // Request - setnpcdialogtitle l("What was the sequence?"); - showavatar AVATAR_SEQBOARD; - sleep2(500); - - for (.@i=0;.@i < getarraysize(@sequence);.@i++) { - setskin "seqboard"; - select - l("Green"), - l("Blue"), - l("Red"), - l("Yellow"), - l("Exit"); - .@ans=@menu; - setskin ""; - mes ""; - mes l("%s", colorname(.@ans)); - //next; - setnpcdialogtitle strnpcinfo(1); - - // Exit - if (.@ans == 5) - goto L_Close; - - // Wrong reply - if (.@ans != @sequence[.@i]) - goto L_Wrong; - // Correct! - } - mes ""; - showavatar AVATAR_SEQBOARD_WELL; - - // Seems like everything is/was correct - mesn; - mesq l("Congratulations! Everything was correct!"); - Zeny+=.prize; - @streak+=1; - - // Winning Streak - if (@streak % 10 == 0) - getitem StrangeCoin, 1; - if (@streak == 30) - getitem BronzeGift, 1; - if (@streak == 50) - getitem SilverGift, 1; - mesc l("Your current win streak is @@!", @streak); - next; - // Game over - if (@streak == 50) - goto L_Close; - // Otherwise, go ahead - mesn; - mesc l("Continue?"), 1; - next; - if (askyesno() == ASK_YES) - goto L_Sequence; - goto L_Close; - -L_Wrong: - showavatar AVATAR_SEQBOARD_FAIL; - mesn; - mesq l("Oh no... That is wrong! %%3"); - next; - mesn; - mesq l("Better luck next time!"); - close; - -L_Close: - mesn; - mesq l("Thanks for playing!"); - close; - -OnInit: - .@npcId = getnpcid(.name$); - setunitdata(.@npcId, UDT_HEADTOP, TopHat); - setunitdata(.@npcId, UDT_HEADMIDDLE, CreasedShirt); - setunitdata(.@npcId, UDT_HEADBOTTOM, JeansShorts); - - .sex = G_MALE; - .distance = 4; - .price = 5; - .prize = 50; - npcsit; - end; -} - diff --git a/npc/017-3/nico.txt b/npc/017-3/nico.txt deleted file mode 100644 index 19dd79e..0000000 --- a/npc/017-3/nico.txt +++ /dev/null @@ -1,302 +0,0 @@ -// TMW2 scripts. -// Authors: -// Jesusalva -// Description: -// Arcmage Cards Enhancer - -017-3,37,84,0 script Nico Goethe NPC_PLAYER,{ - mesn; - mesq l("My name is Nico Goethe, an %s card player.", "[@@https://arcmage.org|Arcmage@@]"); - next; - mesn; - mesq l("Would love to invite you to a card minigame... But alas, Kenton told me that minigames are a waste of time, and that I should not bother adventurers with it."); - next; - mesn; - mesq l("However, I am still up for trading cards, if you wish."); - next; - goto L_Main; - -L_Main: - select - l("Trade a card"), - l("Evolve a card"), - l("Lets play!"), - l("Bye."); - mes ""; - switch (@menu) { - // Trade Card - case 1: - mesn; - mesq l("Give me a card and select another card of same class. I charge %d GP for simple exchanges.", 5000); - next; - if (Zeny < 5000) - break; - - mes "##B" + l("Drag and drop an item from your inventory.") + "##b"; - .@card = requestitem(); - if (.@card <= 1) break; - - @menuret = 0; - switch (.@card) { - case HeroCard: - case KnightCard: - case ClericCard: - case DruidCard: - case MageCard: - case NinjaCard: - case NatureCard: - case NecromancerCard: - menuint - "Sorry, I don't want to trade it.", 0, - getitemname(HeroCard), HeroCard, - getitemname(KnightCard), KnightCard, - getitemname(ClericCard), ClericCard, - getitemname(DruidCard), DruidCard, - getitemname(MageCard), MageCard, - getitemname(NinjaCard), NinjaCard, - getitemname(NatureCard), NatureCard, - getitemname(NecromancerCard), NecromancerCard; - mes ""; - break; - case SpeedCard: - case ReflectCard: - case PowerCard: - case WallCard: - menuint - "Sorry, I don't want to trade it.", 0, - getitemname(SpeedCard), SpeedCard, - getitemname(ReflectCard), ReflectCard, - getitemname(PowerCard), PowerCard, - getitemname(WallCard), WallCard; - mes ""; - break; - case HeroCardS: - case KnightCardS: - case ClericCardS: - case DruidCardS: - case MageCardS: - case NinjaCardS: - case NatureCardS: - case NecromancerCardS: - menuint - "Sorry, I don't want to trade it.", 0, - getitemname(HeroCardS), HeroCardS, - getitemname(KnightCardS), KnightCardS, - getitemname(ClericCardS), ClericCardS, - getitemname(DruidCardS), DruidCardS, - getitemname(MageCardS), MageCardS, - getitemname(NinjaCardS), NinjaCardS, - getitemname(NatureCardS), NatureCardS, - getitemname(NecromancerCardS), NecromancerCardS; - mes ""; - break; - case SpeedCardS: - case ReflectCardS: - case PowerCardS: - case WallCardS: - menuint - "Sorry, I don't want to trade it.", 0, - getitemname(SpeedCardS), SpeedCardS, - getitemname(ReflectCardS), ReflectCardS, - getitemname(PowerCardS), PowerCardS, - getitemname(WallCardS), WallCardS; - mes ""; - break; - case HeroCardX: - case KnightCardX: - case ClericCardX: - case DruidCardX: - case MageCardX: - case NinjaCardX: - case NatureCardX: - case NecromancerCardX: - menuint - "Sorry, I don't want to trade it.", 0, - getitemname(HeroCardX), HeroCardX, - getitemname(KnightCardX), KnightCardX, - getitemname(ClericCardX), ClericCardX, - getitemname(DruidCardX), DruidCardX, - getitemname(MageCardX), MageCardX, - getitemname(NinjaCardX), NinjaCardX, - getitemname(NatureCardX), NatureCardX, - getitemname(NecromancerCardX), NecromancerCardX; - mes ""; - break; - case SpeedCardX: - case ReflectCardX: - case PowerCardX: - case WallCardX: - menuint - "Sorry, I don't want to trade it.", 0, - getitemname(SpeedCardX), SpeedCardX, - getitemname(ReflectCardX), ReflectCardX, - getitemname(PowerCardX), PowerCardX, - getitemname(WallCardX), WallCardX; - mes ""; - break; - default: - mesn; - mesq l("Sorry, I only deal with Arcmage cards."); - break; - } - if (@menuret < 1) - break; - Zeny -= 5000; - delitem .@card, 1; - getitem @menuret, 1; - break; - // Evolve Card - case 2: - mesn; - mesq l("Give me %s copies of the same card and %s GP, and I'll improve its tier.", b(l("three")), fnum(25000)); - mesc l("Normal Cards can be upgraded to S-Tier, and S Cards can be upgraded to X-Tier. X-Tier cards cannot be upgraded."); - next; - if (Zeny < 25000) - break; - - mes "##B" + l("Drag and drop an item from your inventory.") + "##b"; - .@card = requestitem(); - if (.@card <= 1) break; - if (countitem(.@card) < 3) { - mesn; - mesq l("You don't have enough cards of this type to upgrade."); - next; - break; - } - switch (.@card) { - case HeroCard: - delitem .@card, 3; Zeny -= 25000; - getitem HeroCardS, 1; - break; - case KnightCard: - delitem .@card, 3; Zeny -= 25000; - getitem KnightCardS, 1; - break; - case ClericCard: - delitem .@card, 3; Zeny -= 25000; - getitem ClericCardS, 1; - break; - case DruidCard: - delitem .@card, 3; Zeny -= 25000; - getitem DruidCardS, 1; - break; - case MageCard: - delitem .@card, 3; Zeny -= 25000; - getitem MageCardS, 1; - break; - case NinjaCard: - delitem .@card, 3; Zeny -= 25000; - getitem NinjaCardS, 1; - break; - case NatureCard: - delitem .@card, 3; Zeny -= 25000; - getitem NatureCardS, 1; - break; - case NecromancerCard: - delitem .@card, 3; Zeny -= 25000; - getitem NecromancerCardS, 1; - break; - case SpeedCard: - delitem .@card, 3; Zeny -= 25000; - getitem SpeedCardS, 1; - break; - case ReflectCard: - delitem .@card, 3; Zeny -= 25000; - getitem ReflectCardS, 1; - break; - case PowerCard: - delitem .@card, 3; Zeny -= 25000; - getitem PowerCardS, 1; - break; - case WallCard: - delitem .@card, 3; Zeny -= 25000; - getitem WallCardS, 1; - break; - - - case HeroCardS: - delitem .@card, 3; Zeny -= 25000; - getitem HeroCardX, 1; - break; - case KnightCardS: - delitem .@card, 3; Zeny -= 25000; - getitem KnightCardX, 1; - break; - case ClericCardS: - delitem .@card, 3; Zeny -= 25000; - getitem ClericCardX, 1; - break; - case DruidCardS: - delitem .@card, 3; Zeny -= 25000; - getitem DruidCardX, 1; - break; - case MageCardS: - delitem .@card, 3; Zeny -= 25000; - getitem MageCardX, 1; - break; - case NinjaCardS: - delitem .@card, 3; Zeny -= 25000; - getitem NinjaCardX, 1; - break; - case NatureCardS: - delitem .@card, 3; Zeny -= 25000; - getitem NatureCardX, 1; - break; - case NecromancerCardS: - delitem .@card, 3; Zeny -= 25000; - getitem NecromancerCardX, 1; - break; - case SpeedCardS: - delitem .@card, 3; Zeny -= 25000; - getitem SpeedCardX, 1; - break; - case ReflectCardS: - delitem .@card, 3; Zeny -= 25000; - getitem ReflectCardX, 1; - break; - case PowerCardS: - delitem .@card, 3; Zeny -= 25000; - getitem PowerCardX, 1; - break; - case WallCardS: - delitem .@card, 3; Zeny -= 25000; - getitem WallCardX, 1; - break; - - default: - mesn; - mesq l("Sorry, I only deal with Arcmage cards."); - break; - } - break; - // TODO: Play minigame - case 3: - mesn; - mesq l("...Are you trying to troll me?"); - next; - break; - // Leave - default: - closeclientdialog; - goodbye; - close; - break; - } - goto L_Main; - -OnInit: - .@npcId = getnpcid(.name$); - setunitdata(.@npcId, UDT_HEADTOP, TopHat); - setunitdata(.@npcId, UDT_HEADMIDDLE, GoldenLightPlatemail); - setunitdata(.@npcId, UDT_HEADBOTTOM, LeatherTrousers); - setunitdata(.@npcId, UDT_WEAPON, ManaGloves); - setunitdata(.@npcId, UDT_HAIRSTYLE, 24); - setunitdata(.@npcId, UDT_HAIRCOLOR, 4); - npcsit; - - .sex = G_MALE; - .distance = 4; - end; - -} - diff --git a/npc/020-1/trainer.txt b/npc/020-1/trainer.txt deleted file mode 100644 index 1fb4774..0000000 --- a/npc/020-1/trainer.txt +++ /dev/null @@ -1,167 +0,0 @@ -// TMW2 scripts. -// Authors: -// Jesusalva -// Description: -// Mercenary Trainer - -020-1,39,89,0 script Mercenary Trainer NPC_REDY_MALE_SWORD,{ - mesn; - mesq l("Hello, I am a sword to hire, a Mercenary Trainer and Chief."); - next; - mesn; - mesq l("Do you want to hire a mercenary? Or perhaps get a card so you can invoke them later? I can even make them stronger if you wish."); - next; - goto L_Main; - -L_Main: - select - l("Hire a mercenary"), - l("Buy a mercenary card"), - l("Evolve mercenaries"), - l("Bye."); - mes ""; - switch (@menu) { - // Hire Card - case 1: - menuint - l("[%d GP] [Lv 1~25] Hire for one hour", 2500), 1, - l("[%d GP] [Lv 26~40] Hire for one hour", 7500), 2, - l("[%d GP] [Lv 41~60] Hire for one hour", 15000), 3, - l("[%d GP] [Lv 61~79] Hire for one hour", 30000), 4, - l("[%d GP] [Lv 80~100] Hire for one hour", 50000), 5, - l("I've changed my mind"), 0; - switch (@menuret) { - case 1: - .@gp=max(2000, POL_AdjustPrice(2500)); - if (Zeny < .@gp) { - mesc l("You cannot pay."), 1; - next; - } else { - .@mid=merc_randid(0, 0, 0, 0, 1000); - mercenary_create(.@mid, 3600000); - POL_PlayerMoney(.@gp); - } - break; - case 2: - .@gp=max(7000, POL_AdjustPrice(7500)); - if (Zeny < .@gp) { - mesc l("You cannot pay."), 1; - next; - } else { - .@mid=merc_randid(0, 0, 0, 1000, 0); - mercenary_create(.@mid, 3600000); - POL_PlayerMoney(.@gp); - } - break; - case 3: - .@gp=max(14000, POL_AdjustPrice(15000)); - if (Zeny < .@gp) { - mesc l("You cannot pay."), 1; - next; - } else { - mercenary_create merc_randid(0, 0, 1000, 0, 0), 3600000; - POL_PlayerMoney(.@gp); - } - break; - case 4: - .@gp=max(27000, POL_AdjustPrice(30000)); - if (Zeny < .@gp) { - mesc l("You cannot pay."), 1; - next; - } else { - mercenary_create merc_randid(0, 1000, 0, 0, 0), 3600000; - POL_PlayerMoney(.@gp); - } - break; - case 5: - .@gp=max(45000, POL_AdjustPrice(50000)); - if (Zeny < .@gp) { - mesc l("You cannot pay."), 1; - next; - } else { - mercenary_create merc_randid(1000, 0, 0, 0, 0), 3600000; - POL_PlayerMoney(.@gp); - } - break; - default: - break; - } - break; - // Buy Card - case 2: - npcshopattach(.name$); - openshop; - closedialog; - close; - break; - // Evolve Card - case 3: - mesn; - mesq l("Give me %s cards of the same type, and I'll give you one card of a higher rarity. There is no cost, but the card is random.", b(l("three"))); - next; - mes "##B" + l("Drag and drop an item from your inventory.") + "##b"; - - .@card = requestitem(); - if (.@card <= 1) break; - if (countitem(.@card) < 3) { - mesc l("You need at least %d cards of same kind.", 3), 1; - break; - } - .@st = merc_getstar(.@card); - if (.@st < 1 || .@st >= 5) { - mesc l("This cannot be evolved."), 1; - break; - } - delitem .@card, 3; - merc_boxset( - (.@st == 4 ? 1000 : 0), - (.@st == 3 ? 1000 : 0), - (.@st == 2 ? 1000 : 0), - (.@st == 1 ? 1000 : 0), - 0); - mesn; - mesq l("Here you go! Wasn't this a sweet deal?"); - break; - // Leave - default: - closeclientdialog; - goodbye; - close; - break; - } - goto L_Main; - -OnInit: - tradertype(NST_MARKET); - sellitem MercBoxEE, 25000, 1; - sellitem MercBoxDD, 15000, 2; - sellitem MercBoxCC, 7500, 3; - sellitem MercBoxBB, 3750, 4; - sellitem MercBoxAA, 1250, 5; - - .distance=5; - .sex=G_MALE; - end; - -OnClock0001: -OnClock1201: - restoreshopitem MercBoxEE, 25000, 1; - restoreshopitem MercBoxDD, 15000, 2; - restoreshopitem MercBoxCC, 7500, 3; - restoreshopitem MercBoxBB, 3750, 4; - restoreshopitem MercBoxAA, 1250, 5; - end; - -// Pay your taxes! -OnBuyItem: - debugmes("Purchase confirmed"); - PurchaseTaxes("Nival"); - end; - -OnSellItem: - debugmes("Sale confirmed"); - PurchaseTaxes("Nival"); - end; - -} - diff --git a/npc/026-2/_mobs.txt b/npc/026-2/_mobs.txt index a5b827f..bcaa771 100644 --- a/npc/026-2/_mobs.txt +++ b/npc/026-2/_mobs.txt @@ -1,7 +1,8 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Map 026-2: Count's Fortress mobs -026-2,61,35,39,17 monster Piou Knight 1434,8,300000,30000 -026-2,62,81,39,17 monster Grenadier 1444,18,300000,30000 -026-2,70,57,39,17 monster Swashbuckler 1443,18,300000,30000 -026-2,57,59,39,27 monster Thug 1442,18,300000,30000 -026-2,61,57,20,45 monster Revolver Shooter 1208,18,300000,30000 +026-2,61,35,39,17 monster Piou Knight 1434,6,300000,30000 +026-2,62,81,39,17 monster Grenadier 1444,10,300000,30000 +026-2,70,57,39,17 monster Swashbuckler 1443,10,300000,30000 +026-2,57,59,39,27 monster Thug 1442,10,300000,30000 +026-2,61,58,20,43 monster Revolver Shooter 1208,11,300000,30000 +026-2,61,23,39,7 monster Grenadier 1444,3,300000,30000 diff --git a/npc/026-2/_warps.txt b/npc/026-2/_warps.txt index 98b9d22..f15a3bf 100644 --- a/npc/026-2/_warps.txt +++ b/npc/026-2/_warps.txt @@ -1,5 +1,5 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Map 026-2: Count's Fortress warps -026-2,32,98,0 warp #026-2_32_98 0,0,001-3,118,114 +026-2,32,97,0 warp #026-2_32_97 0,0,001-3,118,114 026-2,86,26,0 warp #026-2_86_26 0,0,006-10,52,64 026-2,29,26,0 warp #026-2_29_26 0,0,006-10,51,64 diff --git a/npc/033-1/_import.txt b/npc/033-1/_import.txt index 90c62d6..bd2a012 100644 --- a/npc/033-1/_import.txt +++ b/npc/033-1/_import.txt @@ -2,3 +2,5 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/033-1/_warps.txt", "npc/033-1/misc.txt", +"npc/033-1/nico.txt", +"npc/033-1/trainer.txt", diff --git a/npc/033-1/misc.txt b/npc/033-1/misc.txt index f57cc03..608cc1f 100644 --- a/npc/033-1/misc.txt +++ b/npc/033-1/misc.txt @@ -44,21 +44,69 @@ OnTouch: function script SetPorthosPortal { .@id = getarg(0); mesn l("Portal %02d", .@id); - mes l("Do you want to activate an event?"); + switch (.@id) { + case 6: + mesc l("Event: Moubootaur Showdown"), 1; break; + case 7: + mesc l("Warp: TMW Classic"), 1; close; + case 8: + mesc l("Event: Blanc's Showdown"), 1; break; + case 9: + mesc l("Warp: TMW ML"), 1; close; + default: + mesc l("This portal has not been coded yet."); close; + } next; - select - l("Cancel"), - l("Moubootaur Showdown"); - mes ""; - switch (@menu) { - case 2: + mes l("Do you want to activate the event?"); + if (askyesno() == ASK_NO) close; + switch (.@id) { + case 6: setd(sprintf("$@EVENT_%02d", .@id), PORTHOS_ACTIVE); setd(sprintf("$@EVENT_%02d_M$", .@id), "001-13-2"); setd(sprintf("$@EVENT_%02d_X", .@id), 47); setd(sprintf("$@EVENT_%02d_Y", .@id), 52); break; + case 8: + // Clean-up 001-3 in case there are already mobs there + killmonsterall("001-3"); + // Environment Monsters, they do not respawn + .@m$="001-3"; + // Thematic mobs + areamonster(.@m$, 20, 20, getmapinfo(MAPINFO_SIZE_X, .@m$), getmapinfo(MAPINFO_SIZE_Y, .@m$), strmobinfo(1, Thug), Thug, 150); + areamonster(.@m$, 20, 20, getmapinfo(MAPINFO_SIZE_X, .@m$), getmapinfo(MAPINFO_SIZE_Y, .@m$), strmobinfo(1, Swashbuckler), Swashbuckler, 150); + areamonster(.@m$, 20, 20, getmapinfo(MAPINFO_SIZE_X, .@m$), getmapinfo(MAPINFO_SIZE_Y, .@m$), strmobinfo(1, Grenadier), Grenadier, 140); + areamonster(.@m$, 20, 20, getmapinfo(MAPINFO_SIZE_X, .@m$), getmapinfo(MAPINFO_SIZE_Y, .@m$), strmobinfo(1, OceanPirate), OceanPirate, 100); + // There's `Marley` but they're listed as boss + // We'll likely use them in the mazes, as your target? + // Environment runt + areamonster(.@m$, 20, 20, getmapinfo(MAPINFO_SIZE_X, .@m$), getmapinfo(MAPINFO_SIZE_Y, .@m$), strmobinfo(1, DeathCat), DeathCat, 100); + areamonster(.@m$, 20, 20, getmapinfo(MAPINFO_SIZE_X, .@m$), getmapinfo(MAPINFO_SIZE_Y, .@m$), strmobinfo(1, BlackSlime), BlackSlime, 90); + areamonster(.@m$, 20, 20, getmapinfo(MAPINFO_SIZE_X, .@m$), getmapinfo(MAPINFO_SIZE_Y, .@m$), strmobinfo(1, SmallFrog), SmallFrog, 80); + areamonster(.@m$, 20, 20, getmapinfo(MAPINFO_SIZE_X, .@m$), getmapinfo(MAPINFO_SIZE_Y, .@m$), strmobinfo(1, BigFrog), BigFrog, 80); + // The lower tier + areamonster(.@m$, 20, 20, getmapinfo(MAPINFO_SIZE_X, .@m$), getmapinfo(MAPINFO_SIZE_Y, .@m$), strmobinfo(1, WickedMushroom), WickedMushroom, 50); + areamonster(.@m$, 20, 20, getmapinfo(MAPINFO_SIZE_X, .@m$), getmapinfo(MAPINFO_SIZE_Y, .@m$), strmobinfo(1, Forain), Forain, 50); + areamonster(.@m$, 20, 20, getmapinfo(MAPINFO_SIZE_X, .@m$), getmapinfo(MAPINFO_SIZE_Y, .@m$), strmobinfo(1, Assassin), Assassin, 50); + // The mid tier + areamonster(.@m$, 20, 20, getmapinfo(MAPINFO_SIZE_X, .@m$), getmapinfo(MAPINFO_SIZE_Y, .@m$), strmobinfo(1, HoodedNinja), HoodedNinja, 30); + // The high tier + areamonster(.@m$, 20, 20, getmapinfo(MAPINFO_SIZE_X, .@m$), getmapinfo(MAPINFO_SIZE_Y, .@m$), strmobinfo(1, BlackSlimeMother), BlackSlimeMother, 10); + // The boss level spawns + areamonster(.@m$, 20, 20, getmapinfo(MAPINFO_SIZE_X, .@m$), getmapinfo(MAPINFO_SIZE_Y, .@m$), strmobinfo(1, Reaper), Reaper, 2); + areamonster(.@m$, 20, 20, getmapinfo(MAPINFO_SIZE_X, .@m$), getmapinfo(MAPINFO_SIZE_Y, .@m$), strmobinfo(1, NightmareDragon), NightmareDragon, 2); + areamonster(.@m$, 20, 20, getmapinfo(MAPINFO_SIZE_X, .@m$), getmapinfo(MAPINFO_SIZE_Y, .@m$), strmobinfo(1, Mandragora), Mandragora, 1); + areamonster(.@m$, 20, 20, getmapinfo(MAPINFO_SIZE_X, .@m$), getmapinfo(MAPINFO_SIZE_Y, .@m$), strmobinfo(1, SiegeTower), SiegeTower, 1); + areamonster(.@m$, 20, 20, getmapinfo(MAPINFO_SIZE_X, .@m$), getmapinfo(MAPINFO_SIZE_Y, .@m$), strmobinfo(1, Golem), Golem, 2); + areamonster(.@m$, 20, 20, getmapinfo(MAPINFO_SIZE_X, .@m$), getmapinfo(MAPINFO_SIZE_Y, .@m$), strmobinfo(1, ShadowTortuga), ShadowTortuga, 1); + // Set everything up + setd(sprintf("$@EVENT_%02d", .@id), PORTHOS_ACTIVE); + setd(sprintf("$@EVENT_%02d_M$", .@id), "001-3"); + setd(sprintf("$@EVENT_%02d_X", .@id), 164); + setd(sprintf("$@EVENT_%02d_Y", .@id), 33); + kamibroadcast("Blanc's Showdown was enabled."); + break; default: - mes l("Ok."); + mes l("Error."); break; } close; @@ -66,25 +114,40 @@ function script SetPorthosPortal { } -033-1,72,190,0 script #Porthos01 NPC_NO_SPRITE,0,0,{ +// Shortcut to TMW Classic? +033-1,85,227,0 script #Porthos07 NPC_NO_SPRITE,0,0,{ + end; +OnTouch: + slide 85, 228; + mes l("Do you want to visit The Mana World: Classic?"); + next; + if (askyesno() == ASK_YES) + MirrorLakeSendTo(MLP_TMW, 0); + closeclientdialog; + end; +} + +// Event: Blanc's Manhunt +033-1,72,190,0 script #Porthos08 NPC_NO_SPRITE,0,0,{ end; OnTouch: - if ($@EVENT_01 == PORTHOS_BUSY) { + if ($@EVENT_06 == PORTHOS_BUSY) { dispbottom l("This portal is currently busy - an event must be in progress."); end; } - if ($@EVENT_01 == PORTHOS_UNUSED) { + // 001-3 portals + if ($@EVENT_08 == PORTHOS_UNUSED) { if (is_admin() || is_master()) - SetPorthosPortal(1); + SetPorthosPortal(8); dispbottom l("This portal is not currently active."); end; } - warp $@EVENT_01_M$, $@EVENT_01_X, $@EVENT_01_Y; + warp $@EVENT_08_M$, $@EVENT_08_X, $@EVENT_08_Y; end; } // Shortcut to Moubootaur Legends? -033-1,31,155,0 script #Porthos02 NPC_NO_SPRITE,0,0,{ +033-1,31,155,0 script #Porthos09 NPC_NO_SPRITE,0,0,{ end; OnTouch: slide 31, 156; @@ -96,3 +159,23 @@ OnTouch: end; } +// TODO: Event: Zax De'Kagen Showdown +// Event: Moubootaur Showdown +// This is a draft in npc/config/events.txt +033-1,154,238,0 script #Porthos06 NPC_NO_SPRITE,0,0,{ + end; +OnTouch: + if ($@EVENT_06 == PORTHOS_BUSY) { + dispbottom l("This portal is currently busy - an event must be in progress."); + end; + } + if ($@EVENT_06 == PORTHOS_UNUSED) { + if (is_admin() || is_master()) + SetPorthosPortal(6); + dispbottom l("This portal is not currently active."); + end; + } + warp $@EVENT_06_M$, $@EVENT_06_X, $@EVENT_06_Y; + end; +} + diff --git a/npc/033-1/nico.txt b/npc/033-1/nico.txt new file mode 100644 index 0000000..e656f4b --- /dev/null +++ b/npc/033-1/nico.txt @@ -0,0 +1,472 @@ +// TMW2 scripts. +// Authors: +// Jesusalva +// Description: +// Arcmage Cards Enhancer + +033-1,157,89,0 script Nico Goethe NPC_PLAYER,{ + function colorname; + function gameinfo; + mesn; + mesq l("My name is Nico Goethe, an %s card player.", "[@@https://arcmage.org|Arcmage@@]"); + next; + mesn; + mesq l("Would love to invite you to a card minigame... But alas, Kenton told me that minigames are a waste of time, and that I should not bother adventurers with it."); + next; + mesn; + mesq l("However, I am still up for trading cards, if you wish."); + mesc l("%s discreetly point out that cards only works well in Moubootaur Legends weapons, but this depends on your origin server.", .name$); + next; + goto L_Main; + +L_Main: + select + l("Trade a card"), + l("Evolve a card"), + l("Remove a card"), + l("Lets play!"), + l("Bye."); + mes ""; + switch (@menu) { + // Trade Card + case 1: + mesn; + mesq l("Give me a card and select another card of same class. I charge %d GP for simple exchanges.", 5000); + next; + if (Zeny < 5000) + break; + + mes "##B" + l("Drag and drop an item from your inventory.") + "##b"; + .@card = requestitem(); + if (.@card <= 1) break; + + @menuret = 0; + switch (.@card) { + case HeroCard: + case KnightCard: + case ClericCard: + case DruidCard: + case MageCard: + case NinjaCard: + case NatureCard: + case NecromancerCard: + menuint + "Sorry, I don't want to trade it.", 0, + getitemname(HeroCard), HeroCard, + getitemname(KnightCard), KnightCard, + getitemname(ClericCard), ClericCard, + getitemname(DruidCard), DruidCard, + getitemname(MageCard), MageCard, + getitemname(NinjaCard), NinjaCard, + getitemname(NatureCard), NatureCard, + getitemname(NecromancerCard), NecromancerCard; + mes ""; + break; + case SpeedCard: + case ReflectCard: + case PowerCard: + case WallCard: + menuint + "Sorry, I don't want to trade it.", 0, + getitemname(SpeedCard), SpeedCard, + getitemname(ReflectCard), ReflectCard, + getitemname(PowerCard), PowerCard, + getitemname(WallCard), WallCard; + mes ""; + break; + case HeroCardS: + case KnightCardS: + case ClericCardS: + case DruidCardS: + case MageCardS: + case NinjaCardS: + case NatureCardS: + case NecromancerCardS: + menuint + "Sorry, I don't want to trade it.", 0, + getitemname(HeroCardS), HeroCardS, + getitemname(KnightCardS), KnightCardS, + getitemname(ClericCardS), ClericCardS, + getitemname(DruidCardS), DruidCardS, + getitemname(MageCardS), MageCardS, + getitemname(NinjaCardS), NinjaCardS, + getitemname(NatureCardS), NatureCardS, + getitemname(NecromancerCardS), NecromancerCardS; + mes ""; + break; + case SpeedCardS: + case ReflectCardS: + case PowerCardS: + case WallCardS: + menuint + "Sorry, I don't want to trade it.", 0, + getitemname(SpeedCardS), SpeedCardS, + getitemname(ReflectCardS), ReflectCardS, + getitemname(PowerCardS), PowerCardS, + getitemname(WallCardS), WallCardS; + mes ""; + break; + case HeroCardX: + case KnightCardX: + case ClericCardX: + case DruidCardX: + case MageCardX: + case NinjaCardX: + case NatureCardX: + case NecromancerCardX: + menuint + "Sorry, I don't want to trade it.", 0, + getitemname(HeroCardX), HeroCardX, + getitemname(KnightCardX), KnightCardX, + getitemname(ClericCardX), ClericCardX, + getitemname(DruidCardX), DruidCardX, + getitemname(MageCardX), MageCardX, + getitemname(NinjaCardX), NinjaCardX, + getitemname(NatureCardX), NatureCardX, + getitemname(NecromancerCardX), NecromancerCardX; + mes ""; + break; + case SpeedCardX: + case ReflectCardX: + case PowerCardX: + case WallCardX: + menuint + "Sorry, I don't want to trade it.", 0, + getitemname(SpeedCardX), SpeedCardX, + getitemname(ReflectCardX), ReflectCardX, + getitemname(PowerCardX), PowerCardX, + getitemname(WallCardX), WallCardX; + mes ""; + break; + default: + mesn; + mesq l("Sorry, I only deal with Arcmage cards."); + break; + } + if (@menuret < 1) + break; + Zeny -= 5000; + delitem .@card, 1; + getitem @menuret, 1; + break; + // Evolve Card + case 2: + mesn; + mesq l("Give me %s copies of the same card and %s GP, and I'll improve its tier.", b(l("three")), fnum(25000)); + mesc l("Normal Cards can be upgraded to S-Tier, and S Cards can be upgraded to X-Tier. X-Tier cards cannot be upgraded."); + next; + if (Zeny < 25000) + break; + + mes "##B" + l("Drag and drop an item from your inventory.") + "##b"; + .@card = requestitem(); + if (.@card <= 1) break; + if (countitem(.@card) < 3) { + mesn; + mesq l("You don't have enough cards of this type to upgrade."); + next; + break; + } + switch (.@card) { + case HeroCard: + delitem .@card, 3; Zeny -= 25000; + getitem HeroCardS, 1; + break; + case KnightCard: + delitem .@card, 3; Zeny -= 25000; + getitem KnightCardS, 1; + break; + case ClericCard: + delitem .@card, 3; Zeny -= 25000; + getitem ClericCardS, 1; + break; + case DruidCard: + delitem .@card, 3; Zeny -= 25000; + getitem DruidCardS, 1; + break; + case MageCard: + delitem .@card, 3; Zeny -= 25000; + getitem MageCardS, 1; + break; + case NinjaCard: + delitem .@card, 3; Zeny -= 25000; + getitem NinjaCardS, 1; + break; + case NatureCard: + delitem .@card, 3; Zeny -= 25000; + getitem NatureCardS, 1; + break; + case NecromancerCard: + delitem .@card, 3; Zeny -= 25000; + getitem NecromancerCardS, 1; + break; + case SpeedCard: + delitem .@card, 3; Zeny -= 25000; + getitem SpeedCardS, 1; + break; + case ReflectCard: + delitem .@card, 3; Zeny -= 25000; + getitem ReflectCardS, 1; + break; + case PowerCard: + delitem .@card, 3; Zeny -= 25000; + getitem PowerCardS, 1; + break; + case WallCard: + delitem .@card, 3; Zeny -= 25000; + getitem WallCardS, 1; + break; + + + case HeroCardS: + delitem .@card, 3; Zeny -= 25000; + getitem HeroCardX, 1; + break; + case KnightCardS: + delitem .@card, 3; Zeny -= 25000; + getitem KnightCardX, 1; + break; + case ClericCardS: + delitem .@card, 3; Zeny -= 25000; + getitem ClericCardX, 1; + break; + case DruidCardS: + delitem .@card, 3; Zeny -= 25000; + getitem DruidCardX, 1; + break; + case MageCardS: + delitem .@card, 3; Zeny -= 25000; + getitem MageCardX, 1; + break; + case NinjaCardS: + delitem .@card, 3; Zeny -= 25000; + getitem NinjaCardX, 1; + break; + case NatureCardS: + delitem .@card, 3; Zeny -= 25000; + getitem NatureCardX, 1; + break; + case NecromancerCardS: + delitem .@card, 3; Zeny -= 25000; + getitem NecromancerCardX, 1; + break; + case SpeedCardS: + delitem .@card, 3; Zeny -= 25000; + getitem SpeedCardX, 1; + break; + case ReflectCardS: + delitem .@card, 3; Zeny -= 25000; + getitem ReflectCardX, 1; + break; + case PowerCardS: + delitem .@card, 3; Zeny -= 25000; + getitem PowerCardX, 1; + break; + case WallCardS: + delitem .@card, 3; Zeny -= 25000; + getitem WallCardX, 1; + break; + + default: + mesn; + mesq l("Sorry, I only deal with Arcmage cards."); + break; + } + break; + // Remove a card + case 3: + mesc l("You can drag and drop an item to the NPC window or select an item through your inventory."); + + delinventorylist(); + getinventorylist(); + .@item_index = requestitemindex(); + .@item_id = @inventorylist_id[.@item_index]; + + mesn; + mesq l("Your mind is set? You will probably lose all the dyes and/or cards during on the item during this process. You're bleaching a %s by the way, and THERE ARE NO REFUNDS even if the item go ablaze.", getitemlink(.@item_id)); + + if (askyesno() == ASK_YES) { + mesn; + mesq l("Sure, I'll be done in a jiff."); + next; + successremovecardsindex(.@item_index); // *should* return the card + mesn; + mesq l("Here it is, clean like a whistle!"); + } else { + mesn; + mesq l("Is it truly a hard choice to make?"); + } + next; + break; + // Play minigame + case 4: + mesn; + mesq l("...Are you trying to troll me?"); + next; + mesn; + mesq l("Well, I can't offer you an %s match, but do you want to play something else? I would charge %d GP for a match.", "[@@https://arcmage.org|Arcmage@@]", .price); + next; + if (askyesno() == ASK_NO) { + mesn; + mesq l("Suit yourself."); + next; + break; + } + gameinfo(); + mesn; + mesq l("Ready to begin?"); + if (askyesno() == ASK_YES) goto L_Start; + break; + // Leave + default: + closeclientdialog; + goodbye; + close; + break; + } + goto L_Main; + +function colorname { + switch (getarg(0)) { + case 1: + return "Green"; break; + case 2: + return "Blue"; break; + case 3: + return "Red"; break; + case 4: + return "Yellow"; break; + case 5: + return "Exit"; break; + default: + return l("ERROR: %d", getarg(0)); + } +} + +function gameinfo { + showavatar NPC_FLOPPED_NOBLEMAN; + mes ""; + mesc l("Rules:"); + mesc l("A color sequence will be displayed on the avatar frame."); + mesc l("You must then repeat the sequence at the board which will show."); + next; + mesc l("Prizes:"); + mesc l("You'll get %d GP every time you finish the sequence.", .prize); + mesc l("If you finish %d sequences, you'll get a(n) %s!", 10, getitemlink(ArcmageBoxset)); + next; + return; +} + +L_Start: + showavatar AVATAR_SEQBOARD; + mesc l("Pay attention to the sequence!"); + next; + Zeny -= .price; + deletearray(@sequence); + @streak=0; + +L_Sequence: + // Configure + setnpcdialogtitle l("Memorize the sequence!"); + array_push(@sequence, 1+rand2(4)); + sleep2(1000); + + // Display + freeloop(true); + for (.@i=0;.@i < getarraysize(@sequence);.@i++) { + showavatar 1200+@sequence[.@i]; + sleep2(1200-(@streak*20)); + } + freeloop(false); + + // Request + setnpcdialogtitle l("What was the sequence?"); + showavatar AVATAR_SEQBOARD; + sleep2(500); + + for (.@i=0;.@i < getarraysize(@sequence);.@i++) { + setskin "seqboard"; + select + l("Green"), + l("Blue"), + l("Red"), + l("Yellow"), + l("Exit"); + .@ans=@menu; + setskin ""; + mes ""; + mes l("%s", colorname(.@ans)); + //next; + setnpcdialogtitle strnpcinfo(1); + + // Exit + if (.@ans == 5) + goto L_Close; + + // Wrong reply + if (.@ans != @sequence[.@i]) + goto L_Wrong; + // Correct! + } + mes ""; + showavatar AVATAR_SEQBOARD_WELL; + + // Seems like everything is/was correct + mesn; + mesq l("Congratulations! Everything was correct!"); + Zeny+=.prize; + @streak+=1; + + // Winning Streak + if (@streak % 10 == 0) + getitem ArcmageBoxset, 1; + mesc l("Your current win streak is @@!", @streak); + next; + // Game over + if (@streak == 50) + goto L_Close; + // Otherwise, go ahead + mesn; + mesc l("Continue?"), 1; + next; + if (askyesno() == ASK_YES) + goto L_Sequence; + goto L_Close; + +L_Wrong: + showavatar AVATAR_SEQBOARD_FAIL; + mesn; + mesq l("Oh no... That is wrong! %%3"); + next; + mesn; + mesq l("Better luck next time!"); + next; + showavatar; + goto L_Main; + +L_Close: + showavatar; + mesn; + mesq l("Thanks for the match, it was fun!"); + next; + goto L_Main; + + +OnInit: + .@npcId = getnpcid(.name$); + setunitdata(.@npcId, UDT_HEADTOP, TopHat); + setunitdata(.@npcId, UDT_HEADMIDDLE, GoldenLightPlatemail); + setunitdata(.@npcId, UDT_HEADBOTTOM, LeatherTrousers); + setunitdata(.@npcId, UDT_WEAPON, ManaGloves); + setunitdata(.@npcId, UDT_HAIRSTYLE, 24); + setunitdata(.@npcId, UDT_HAIRCOLOR, 4); + npcsit; + + .sex = G_MALE; + .distance = 4; + .price = 100; + .prize = 25; + end; + +} + diff --git a/npc/033-1/trainer.txt b/npc/033-1/trainer.txt new file mode 100644 index 0000000..c4be75b --- /dev/null +++ b/npc/033-1/trainer.txt @@ -0,0 +1,184 @@ +// TMW2 scripts. +// Authors: +// Jesusalva +// Description: +// Mercenary Trainer + +033-1,180,100,0 script Mercenary Trainer NPC_REDY_MALE_SWORD,{ + mesn; + mesq l("Hello, I am a sword to hire, a Mercenary Trainer and Chief."); + next; + mesn; + mesq l("Do you want to hire a mercenary? Or perhaps get a card so you can invoke them later? I can even make them stronger if you wish."); + mesc l("With a discrete motion, you notice they also sell scrolls."); + next; + goto L_Main; + +L_Main: + select + l("Hire a mercenary"), + l("Buy a mercenary card"), + l("Evolve mercenaries"), + l("Bye."); + mes ""; + switch (@menu) { + // Hire Card + case 1: + menuint + l("[%d GP] [Lv 1~25] Hire for one hour", 1000), 1, + l("[%d GP] [Lv 26~40] Hire for one hour", 3000), 2, + l("[%d GP] [Lv 41~60] Hire for one hour", 7500), 3, + l("[%d GP] [Lv 61~79] Hire for one hour", 15000), 4, + l("[%d GP] [Lv 80~100] Hire for one hour", 25000), 5, + l("I've changed my mind"), 0; + switch (@menuret) { + case 1: + .@gp=1000; + if (Zeny < .@gp) { + mesc l("You cannot pay."), 1; + next; + } else { + .@mid=merc_randid(0, 0, 0, 0, 1000); + mercenary_create(.@mid, 3600000); + POL_PlayerMoney(.@gp); + } + break; + case 2: + .@gp=3000; + if (Zeny < .@gp) { + mesc l("You cannot pay."), 1; + next; + } else { + .@mid=merc_randid(0, 0, 0, 1000, 0); + mercenary_create(.@mid, 3600000); + POL_PlayerMoney(.@gp); + } + break; + case 3: + .@gp=7500; + if (Zeny < .@gp) { + mesc l("You cannot pay."), 1; + next; + } else { + mercenary_create merc_randid(0, 0, 1000, 0, 0), 3600000; + POL_PlayerMoney(.@gp); + } + break; + case 4: + .@gp=15000; + if (Zeny < .@gp) { + mesc l("You cannot pay."), 1; + next; + } else { + mercenary_create merc_randid(0, 1000, 0, 0, 0), 3600000; + POL_PlayerMoney(.@gp); + } + break; + case 5: + .@gp=25000; + if (Zeny < .@gp) { + mesc l("You cannot pay."), 1; + next; + } else { + mercenary_create merc_randid(1000, 0, 0, 0, 0), 3600000; + POL_PlayerMoney(.@gp); + } + break; + default: + break; + } + break; + // Buy Card + case 2: + npcshopattach(.name$); + openshop; + closedialog; + close; + break; + // Evolve Card + case 3: + mesn; + mesq l("Give me %s cards of the same type, and I'll give you one card of a higher rarity. There is no cost, but the card is random.", b(l("three"))); + next; + mes "##B" + l("Drag and drop an item from your inventory.") + "##b"; + + .@card = requestitem(); + if (.@card <= 1) break; + if (countitem(.@card) < 3) { + mesc l("You need at least %d cards of same kind.", 3), 1; + break; + } + .@st = merc_getstar(.@card); + if (.@st < 1 || .@st >= 5) { + mesc l("This cannot be evolved."), 1; + break; + } + delitem .@card, 3; + merc_boxset( + (.@st == 4 ? 1000 : 0), + (.@st == 3 ? 1000 : 0), + (.@st == 2 ? 1000 : 0), + (.@st == 1 ? 1000 : 0), + 0); + mesn; + mesq l("Here you go! Wasn't this a sweet deal?"); + break; + // Leave + default: + closeclientdialog; + goodbye; + close; + break; + } + goto L_Main; + +OnInit: + tradertype(NST_ZENY); + sellitem MercBoxEE, 25000; + sellitem MercBoxDD, 15000; + sellitem MercBoxCC, 7500; + sellitem MercBoxBB, 3750; + sellitem MercBoxAA, 1250; + + sellitem ScrollSMaggot, 1000; + sellitem ScrollSCave, 1500; + sellitem ScrollSWolvern, 2000; + sellitem ScrollSYeti, 2500; + sellitem ScrollSTerranite, 3000; + sellitem ScrollSDragon, 3500; + + sellitem SacredImmortalityPotion, 25000; + + sellitem ScrollMagnusHealA, 500; + sellitem ScrollMagnusHealB,1000; + sellitem ScrollMagnusHealC,2000; + + sellitem ScrollBattlePlansA, 400; + sellitem ScrollBattlePlansB,1000; + //sellitem ScrollBattlePlansC,1500; + + sellitem ScrollDefenseBlessA, 400; + sellitem ScrollDefenseBlessB,1000; + //sellitem ScrollDefenseBlessC,1500; + + sellitem ScrollCriticalFortuneA, 400; + sellitem ScrollCriticalFortuneB,1000; + //sellitem ScrollCriticalFortuneC,1500; + + .distance=5; + .sex=G_MALE; + end; + +// Pay your taxes! +OnBuyItem: + debugmes("Purchase confirmed"); + PurchaseTaxes("Nival"); + end; + +OnSellItem: + debugmes("Sale confirmed"); + PurchaseTaxes("Nival"); + end; + +} + diff --git a/npc/033-2/magic.txt b/npc/033-2/magic.txt index 35f2145..0ee0dc2 100644 --- a/npc/033-2/magic.txt +++ b/npc/033-2/magic.txt @@ -39,6 +39,9 @@ OnInit: function script Crossroads_Magic { + // Respect SC_SILENCE + if (getstatus(SC_SILENCE)) return; + // Structure: "«Power» «Element», «Action» «Range»!" .@msg$ = getarg(0); explode(.@x$, .@msg$, " "); @@ -207,7 +210,7 @@ function script Crossroads_Magic { // areaharm() if (.@TY & 1) { - .@dmg = AdjustSpellpower(.@PW); + .@dmg = AdjustSpellpower(.@PW) * 11 / 10; areaharm(getcharid(3), .@RG, .@dmg, HARM_MAGI, .@EL, .@F$); } diff --git a/npc/config/events.txt b/npc/config/events.txt index 3dd4311..89e7f37 100644 --- a/npc/config/events.txt +++ b/npc/config/events.txt @@ -4,7 +4,11 @@ // Description: // Some of the event scripts +001-3 mapflag zone MMO 001-13-2 mapflag zone MMO + +///////////////////////////////////////////////////////////////////////////////// +// Area 06: Moubootaur Showdown 001-13-2,47,26,0 script #FoSCore NPC_NO_SPRITE,{ if (!is_admin() && !is_master()) end; if ($@FIRESOFSTEAM_BOSS) end; @@ -22,7 +26,7 @@ l("Portable Apocalypse"); mes ""; $@FIRESOFSTEAM_DIFF=70+(@menu*30); - $@EVENT_01 = PORTHOS_BUSY; + $@EVENT_06 = PORTHOS_BUSY; switch (@menu) { case 1: .@d$="##2Easy"; break; case 2: .@d$="##3Crazy"; break; @@ -35,7 +39,7 @@ changemusic("001-13-2", "mythica.ogg"); closeclientdialog; // Dispose of the GM - warp "033-1", 72, 185; + warp "033-1", 49, 193; sleep(200); // PC no longer attached // Start the event @@ -152,7 +156,7 @@ OnEventEnd: mapannounce("001-13-2", "Moubootaur : ##1##BI'll come back... Stronger than ever!", 0); sleep(3000); maptimer2("001-13-2", 10, "#FoSCore::OnMFSurvive"); - $@EVENT_01 = PORTHOS_UNUSED; + $@EVENT_06 = PORTHOS_UNUSED; end; @@ -171,7 +175,7 @@ OnMFShake: end; OnMFDispose: - if (ispcdead()) warp("033-1", 72, 191); + if (ispcdead()) warp("033-1", 154, 240); end; OnMFSurvive: @@ -180,7 +184,7 @@ OnMFSurvive: ##01_CRQUEST = ##01_CRQUEST | MLP_CR_DEBUT; specialeffect(FX_FANFARE, AREA, getcharid(3)); sleep2(15000); - warp("033-1", 72, 191); + warp("033-1", 154, 240); end; ////////////// Heartbeat ////////////// @@ -308,7 +312,7 @@ L_Defeat: .Support5=0; killmonsterall("001-13-2"); kamibroadcast("The players were defeated at Fires of Steam Showdown.", "Fires of Steam"); - $@EVENT_01 = PORTHOS_UNUSED; + $@EVENT_06 = PORTHOS_UNUSED; stopnpctimer; end; @@ -320,3 +324,92 @@ OnInit: end; } + +///////////////////////////////////////////////////////////////////////////////// +// Area 08: Blanc's Showdown +001-3,147,153,0 script #E08_CF NPC_HIDDEN,2,0,{ + end; +OnTouch: + if (!(get_byte(EVENT_08, 0) & EV08_KEY)) { + dispbottom l("Darn, it is locked. A few keys will be necessary to open this."); + end; + } + warp "026-2", 32, 96; + end; +OnBossDie: + .@p=get_nibble(EVENT_08, 2)+1; + set_nibble(EVENT_08, 2, .@p); + if (.@p >= 3) { + set_byte(EVENT_08, 0, get_byte(EVENT_08, 0) | EV08_KEY); + dispbottom l("I got all the keys! Time to get out of here!"); + sleep2(500); + warp "001-3", 164, 33; + end; + } + dispbottom l("Keys: %d/%d", .@p, 3); + end; +OnInit: + .sex = G_OTHER; + end; +} + +001-3,35,32,0 script #E08WP_150 NPC_HIDDEN,0,0,{ + end; +OnTouch: + if ($@EVENT_08 != PORTHOS_ACTIVE) end; + //if (get_byte(EVENT_08, 0) & EV08_P150) end; + if (get_byte(EVENT_08, 0) & EV08_KEY) end; + setpcblock(PCBLOCK_HARD, true); + mesc l("STORY MODE ENABLED. Monsters won't attack you, so you can read without worries."), 1; + next; + mesc l("Seems like our prey was through. This portal connects to a Level %d Maze.", .lvl); + if (BaseLevel > .lvl*2) { + mesc l("Meaning I cannot use this one. Dang!"); + next; + goto L_Close; + } + mesc l("If I can find Elmo or Marley inside, they should be holding the keys for the castle, where we presume Blanc ran off to."); + mesc l("I need to defeat at least three of them."), 1; + next; + mesc l("Will I explore this Maze? Or will I look another?"), 1; + next; + if (askyesno() == ASK_YES) { + set_nibble(EVENT_08, 2, 0); + CreateMaze(IOT_CHAR, MAZE_SIZE_G | MAZE_SIZE_X); + if (BaseLevel > .lvl) + .density=12; + else + .density=15; + MazeMobs(.lvl, false, .density); + + // Spawn & Configure the boss monster + .@mx=getmapinfo(MAPINFO_SIZE_X, MAZE_MAP$)-20; + .@my=getmapinfo(MAPINFO_SIZE_Y, MAZE_MAP$)-20; + .@mob=areamonster(MAZE_MAP$, 20, 20, .@mx, .@my, "Elmo", Marley, 5, "#E08_CF::OnBossDie"); + InitMaze(7200); + dispbottom col(l("Reminder : Defeat 3/5 %s to win. Time limit: %d minutes or death.", b("Elmo"), 120), 2); + } + +L_Close: + closeclientdialog; + setpcblock(PCBLOCK_HARD, false); + end; +OnInit: + .sex = G_OTHER; + .@n$ = strnpcinfo(0, "_0"); + explode(.@ni$, .@n$, "_"); + .lvl = atoi(.@ni$[1]); + end; +} + +001-3,113,148,0 duplicate(#E08WP_150) #E08WP_100 NPC_HIDDEN,0,0 +001-3,258,39,0 duplicate(#E08WP_150) #E08WP_75 NPC_HIDDEN,0,0 +001-3,38,257,0 duplicate(#E08WP_150) #E08WP_50 NPC_HIDDEN,0,0 +001-3,229,188,0 duplicate(#E08WP_150) #E08WP_25 NPC_HIDDEN,0,0 + +// 35,32 NW (150) OK +// 113,148 Central circle (100) +// 258,39 NE (75) +// 38,257 SW (50) +// 229,188 SE (25) + diff --git a/npc/config/traps.txt b/npc/config/traps.txt index 1b43e5c..560abcf 100644 --- a/npc/config/traps.txt +++ b/npc/config/traps.txt @@ -65,7 +65,9 @@ function script IronTrap { // Boom - Hurt and Stun (only works on players and mobs) .@stun*=1000; - sc_start SC_STUN, rand2(.@stun,.@stun*3), 0; + // Replaced SC_STUN with something else, which is not SC_Start* controlled + // But basically, SC_STUN causes lag in M+ because the client is dumb + sc_start2 SC_QUAGMIRE, rand2(.@stun,.@stun*3), 20000, 20000; .@gid=(playerattached() ? playerattached() : mobattached()); // Just to be sure diff --git a/npc/craft/price.txt b/npc/craft/price.txt index 4b0ab9c..34ff919 100644 --- a/npc/craft/price.txt +++ b/npc/craft/price.txt @@ -58,7 +58,7 @@ function script _fix_cPrice { // Update the final price if (.@price > 0) { - debugmes("Price for %s adjusted from %d (%d) to %d (%d) GP", getitemname(.@item), getiteminfo(.@item, ITEMINFO_BUYPRICE), getiteminfo(.@item, ITEMINFO_SELLPRICE), .@price * .@m / 10, .@price); + //debugmes("Price for %s adjusted from %d (%d) to %d (%d) GP", getitemname(.@item), getiteminfo(.@item, ITEMINFO_BUYPRICE), getiteminfo(.@item, ITEMINFO_SELLPRICE), .@price * .@m / 10, .@price); setiteminfo(.@item, ITEMINFO_BUYPRICE, .@price * .@m / 10); setiteminfo(.@item, ITEMINFO_SELLPRICE, .@price); //debugmes("New Price for %s is now %d (%d) GP", getitemname(.@item), getiteminfo(.@item, ITEMINFO_BUYPRICE), getiteminfo(.@item, ITEMINFO_SELLPRICE)); diff --git a/npc/functions/main.txt b/npc/functions/main.txt index b2a7a78..999d18c 100644 --- a/npc/functions/main.txt +++ b/npc/functions/main.txt @@ -299,6 +299,34 @@ function script any_of { return getelementofarray(getarg(0), getarrayindex(getarg(0)) + rand2(getarraysize(getarg(0)) - getarrayindex(getarg(0)))); } +// Miller Algorithm implementation for shuffling (PRIG) +// miller_rand( state, seed, array_size ) +function script miller_rand { + .@inx = getarg(0); + .@shuffleID = getarg(1); + .@listSize = getarg(2); + + .@shuffleID += 131 * (.@inx/.@listSize); // have inx overflow effect the mix + .@si = (.@inx + .@shuffleID) % .@listSize; // cut the deck + + .@topEven = .@listSize - (.@listSize & 1); // compute reference value + .@r1 = .@shuffleID % 0xFFF; // improved randomizing values + .@r2 = .@shuffleID % 0x3FFF ^ .@r1; + .@r3 = .@shuffleID / 881 + 3; + .@rx = (.@shuffleID / .@listSize) % .@listSize + 1; + + // NOTE: the next line operates only 1/3 the time, the following line 1/2 + if (.@si % 3 == 0) + .@si = (((.@si/3)*3343+.@r1) % ((.@listSize+2)/3)) * 3; // spin multiples of 3 + if (.@si&1) + .@si = (2 * .@r2 + .@topEven - .@si) % .@topEven; // reverse+rotate flow of odd #s + if ((.@si ^ .@rx) < .@listSize) + .@si ^= .@rx; // flip some bits with Xor + .@si = (.@si * 9973 + .@r3) % .@listSize; // turn more prime wheels + + return .@si; +} + function script die { if ($HARDCORE) { @grace=true; diff --git a/npc/functions/mobpoint.txt b/npc/functions/mobpoint.txt index b49baa9..08b3ff7 100644 --- a/npc/functions/mobpoint.txt +++ b/npc/functions/mobpoint.txt @@ -85,8 +85,6 @@ OnNPCKillEvent: callfunc "CoffeeDay"; callfunc "FSFDay"; callfunc "CraftmasterDay"; - callfunc "CadisQuestCheck"; - callfunc "GeminiKill"; callfunc "SK_drops"; // Other updates diff --git a/npc/items/grenade.txt b/npc/items/grenade.txt index 12a314b..a3ddf9f 100644 --- a/npc/items/grenade.txt +++ b/npc/items/grenade.txt @@ -78,7 +78,7 @@ function script areasc2 { return; } -// areasc3(range, time, sc, bl, val1, val2, filter) +// areasc3(range, time, sc, bl, val1, val2, filter, target, chances) // Defaults to 3x3 square, sleep mob for 500ms. Ignores you. // Need a player caster. Valid BL: BL_MOB | BL_PC | BL_HOM | BL_MER function script areasc3 { @@ -89,14 +89,16 @@ function script areasc3 { .@v1=getarg(4, 1); .@v2=getarg(5, 1); .@f$=getarg(6, "filter_notme"); + .@t=getarg(7, playerattached()); + .@sr=getarg(8, 10000); - getmapxy(.@m$, .@x, .@y, 0); + getmapxy(.@m$, .@x, .@y, getunittype(.@t), .@t); .@c=getunits(.@b, .@mbs, false, .@m$, .@x-.@r, .@y-.@r, .@x+.@r, .@y+.@r); for (.@i = 0; .@i < .@c; .@i++) { // Filtering if (!callfunc(.@f$, .@mbs[.@i])) continue; - sc_start2 .@s, .@d, .@v1, .@v2, 10000, SCFLAG_NONE, .@mbs[.@i]; + sc_start2 .@s, .@d, .@v1, .@v2, .@sr, SCFLAG_NONE, .@mbs[.@i]; specialeffect(FX_BUFF, AREA, .@mbs[.@i]); } return; -- cgit v1.2.3-60-g2f50