diff options
author | toams <toams85@gmail.com> | 2020-05-02 19:15:44 +0200 |
---|---|---|
committer | toams <toams85@gmail.com> | 2020-05-02 19:15:44 +0200 |
commit | 194b3ddb785c1e9523649b2d32a1724d1c42a297 (patch) | |
tree | 75e828d9c739d1ec79dc16452d254e75db26509d | |
parent | 6fb3638bf7e9f1d1ad405352c28d064c9592083a (diff) | |
parent | a8114b91595b8062f8ab374b359d892107942891 (diff) | |
download | serverdata-194b3ddb785c1e9523649b2d32a1724d1c42a297.tar.gz serverdata-194b3ddb785c1e9523649b2d32a1724d1c42a297.tar.bz2 serverdata-194b3ddb785c1e9523649b2d32a1724d1c42a297.tar.xz serverdata-194b3ddb785c1e9523649b2d32a1724d1c42a297.zip |
Merge branch 'master' into kfahr
142 files changed, 3720 insertions, 927 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 818f3226..04aaf865 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -259,7 +259,8 @@ mariadb_run_latest_gcc6: when: always expire_in: 3 week -mariadb_run_latest_gcc7: +# disable gcc-7 for now (dropped by Debian Unstable) +.mariadb_run_latest_gcc7: stage: test script: - export CC=gcc-7 diff --git a/conf/atcommand.conf b/conf/atcommand.conf index eede6399..cceabb34 100644 --- a/conf/atcommand.conf +++ b/conf/atcommand.conf @@ -20,7 +20,7 @@ Format is */ aliases: { - mobinfo: ["monsterinfo", "mi"] + mobinfo: ["mi"] iteminfo: ["ii"] time: ["date", "serverdate", "servertime"] tonpc: ["npc"] diff --git a/conf/groups.conf b/conf/groups.conf index 610f4d77..4e57b899 100644 --- a/conf/groups.conf +++ b/conf/groups.conf @@ -107,8 +107,9 @@ groups: ( duel: true accept: true reject: true - noask: true // Autoreject duels + invite: true leave: true + noask: true // Autoreject duels email: true request: true time: true diff --git a/conf/map/battle/exp.conf b/conf/map/battle/exp.conf index 54b2ec4e..0db88b71 100644 --- a/conf/map/battle/exp.conf +++ b/conf/map/battle/exp.conf @@ -57,11 +57,11 @@ exp_calc_type: 0 // Experience increase per attacker. That is, every additional attacker to the // monster makes it give this much more experience // (eg: 5 people attack with 25 here, +(25*4)% -> +100% exp) -exp_bonus_attacker: 25 +exp_bonus_attacker: 30 // Max number of attackers at which exp bonus is capped // (eg: if set at 5, the max bonus is 4*bonus-per-char regardless of attackers) -exp_bonus_max_attacker: 12 +exp_bonus_max_attacker: 10 // MVP bonus exp rate. (Note 2) mvp_exp_rate: 100 diff --git a/conf/map/maps.conf b/conf/map/maps.conf index a8e041a0..bbc85cfc 100644 --- a/conf/map/maps.conf +++ b/conf/map/maps.conf @@ -58,6 +58,7 @@ map_list: ( "001-3-1", "001-3-2", "008-1-1", + "008-1-2", "008-1", "008-2-0", "008-2-1", @@ -94,7 +95,16 @@ map_list: ( "008-2-9", "008-3-0", "008-3-1", - "008-4-1", + "008-3-2", + "012-1", + "012-2-1", + "012-2-2", + "012-2-3", + "012-2-4", + "012-2-5", + "012-2-6", + "012-2-7", + "sec_pri", "test", "testbg", ) diff --git a/db/constants.conf b/db/constants.conf index 2c6c4429..6cce7c25 100644 --- a/db/constants.conf +++ b/db/constants.conf @@ -3939,6 +3939,12 @@ constants_db: { RIGHT: 6 DOWNRIGHT: 7 + comment__: "seasons" + WINTER: 0 + SPRING: 1 + SUMMER: 2 + AUTUMN: 3 + comment__: "speechflags" S_FIRST_BLANK_LINE: 1 S_LAST_BLANK_LINE: 2 @@ -4034,6 +4040,27 @@ constants_db: { NPC_MIKHAIL: 185 NPC_TROUPE_LEADER: 186 NPC_SIMON: 187 + NPC_MORCANT: 188 + NPC_THAMAS: 189 + NPC_MORGAN: 190 + NPC_ZITONI: 191 + NPC_ROSEN: 192 + NPC_TANISHA: 193 + NPC_SORFINA: 194 + NPC_JESSIE: 195 + NPC_PRAWORS: 196 + NPC_KAAN: 197 + NPC_AIDAN: 198 + NPC_ISHI: 199 + NPC_LIANA: 200 + NPC_AYASHA: 201 + NPC_ZEGAS: 202 + NPC_NYLE: 203 + NPC_CYNRIC: 204 + NPC_VINCENT: 205 + NPC_AAHNA: 206 + NPC_HASAN: 207 + NPC_CRASMANDE: 208 NPC_CONFUSED_TREE: 400 NPC_ALIGE: 401 @@ -4099,6 +4126,7 @@ constants_db: { NPC_YANNIKA: 463 NPC_FLAG_L: 464 NPC_FLAG_R: 465 + NPC_TOICHI: 466 NPC_TEST1: 800 NPC_PLAYER: 801 diff --git a/db/item_options.conf b/db/item_options.conf index 95e2316a..9a827dca 100644 --- a/db/item_options.conf +++ b/db/item_options.conf @@ -1032,5 +1032,85 @@ item_options_db: ( Id: 186 Name: "BODY_INDESTRUCTIBLE" Script: <" bonus(bUnbreakableArmor, 1); "> +}, +{ + Id: 187 + Name: "IOPT_SPLASHDAMAGE" + Script: <" bonus(bSplashAddRange, getequippedoptioninfo(IT_OPT_VALUE)); "> +}, +{ + Id: 188 + Name: "IOPT_WALKSPEED" + Script: <" bonus(bSpeedAddRate, getequippedoptioninfo(IT_OPT_VALUE)); "> +}, +{ + Id: 189 + Name: "IOPT_EXPGAIN" + Script: <" bonus2(bExpAddRace, RC_All, getequippedoptioninfo(IT_OPT_VALUE)); "> +}, +{ + Id: 190 + Name: "IOPT_DOUBLEATTACK" + Script: <" bonus(bDoubleAddRate, getequippedoptioninfo(IT_OPT_VALUE)); "> +}, +{ + Id: 191 + Name: "IOPT_SCRESIST_POISON" + Script: <" bonus2(bResEff,Eff_Poison, getequippedoptioninfo(IT_OPT_VALUE)); "> +}, +{ + Id: 192 + Name: "IOPT_SCRESIST_SILENCE" + Script: <" bonus2(bResEff,Eff_Silence, getequippedoptioninfo(IT_OPT_VALUE)); "> +}, +{ + Id: 193 + Name: "IOPT_SCRESIST_CURSE" + Script: <" bonus2(bResEff,Eff_Curse, getequippedoptioninfo(IT_OPT_VALUE)); "> +}, +{ + Id: 194 + Name: "IOPT_SCRESIST_BLIND" + Script: <" bonus2(bResEff,Eff_Blind, getequippedoptioninfo(IT_OPT_VALUE)); "> +}, +{ + Id: 195 + Name: "IOPT_SCPROVOKE_POISON" + Script: <" bonus2(bAddEff,Eff_Poison, getequippedoptioninfo(IT_OPT_VALUE)); "> +}, +{ + Id: 196 + Name: "IOPT_SCPROVOKE_SILENCE" + Script: <" bonus2(bAddEff,Eff_Silence, getequippedoptioninfo(IT_OPT_VALUE)); "> +}, +{ + Id: 197 + Name: "IOPT_SCPROVOKE_CURSE" + Script: <" bonus2(bAddEff,Eff_Curse, getequippedoptioninfo(IT_OPT_VALUE)); "> +}, +{ + Id: 198 + Name: "IOPT_SCPROVOKE_BLIND" + Script: <" bonus2(bAddEff,Eff_Blind, getequippedoptioninfo(IT_OPT_VALUE)); "> +}, +{ + Id: 199 + Name: "IOPT_CRITDMG" + Script: <" bonus(bCritAtkRate, getequippedoptioninfo(IT_OPT_VALUE)); "> +}, +{ + Id: 200 + Name: "IOPT_RICHNESS" + Script: <" bonus2(bAddGetZenyNum, -2, getequippedoptioninfo(IT_OPT_VALUE)); "> +}, +{ + Id: 201 + Name: "VINTAGE_WPN" + Script: <" bonus2(bAddRace2, RC_All, -50); "> +}, +{ + Id: 202 + Name: "VINTAGE_ARM" + Script: <" bonus2(bAddDefClass, RC_All, -20); "> } ) diff --git a/db/map_index.txt b/db/map_index.txt index 7243548d..7caaca84 100644 --- a/db/map_index.txt +++ b/db/map_index.txt @@ -55,42 +55,52 @@ 001-3-1 55 001-3-2 56 008-1-1 57 -008-1 58 -008-2-0 59 -008-2-1 60 -008-2-10 61 -008-2-11 62 -008-2-12 63 -008-2-13 64 -008-2-14 65 -008-2-15 66 -008-2-16 67 -008-2-17 68 -008-2-18 69 -008-2-19 70 -008-2-2 71 -008-2-20 72 -008-2-21 73 -008-2-22 74 -008-2-23 75 -008-2-24 76 -008-2-25 77 -008-2-26 78 -008-2-27 79 -008-2-28 80 -008-2-29 81 -008-2-3 82 -008-2-30 83 -008-2-31 84 -008-2-32 85 -008-2-4 86 -008-2-5 87 -008-2-6 88 -008-2-7 89 -008-2-8 90 -008-2-9 91 -008-3-0 92 -008-3-1 93 -008-4-1 94 -test 95 -testbg 96 +008-1-2 58 +008-1 59 +008-2-0 60 +008-2-1 61 +008-2-10 62 +008-2-11 63 +008-2-12 64 +008-2-13 65 +008-2-14 66 +008-2-15 67 +008-2-16 68 +008-2-17 69 +008-2-18 70 +008-2-19 71 +008-2-2 72 +008-2-20 73 +008-2-21 74 +008-2-22 75 +008-2-23 76 +008-2-24 77 +008-2-25 78 +008-2-26 79 +008-2-27 80 +008-2-28 81 +008-2-29 82 +008-2-3 83 +008-2-30 84 +008-2-31 85 +008-2-32 86 +008-2-4 87 +008-2-5 88 +008-2-6 89 +008-2-7 90 +008-2-8 91 +008-2-9 92 +008-3-0 93 +008-3-1 94 +008-3-2 95 +012-1 96 +012-2-1 97 +012-2-2 98 +012-2-3 99 +012-2-4 100 +012-2-5 101 +012-2-6 102 +012-2-7 103 +sec_pri 104 +test 105 +testbg 106 diff --git a/db/re/item_db.conf b/db/re/item_db.conf index 23735e6d..adf5fcec 100644 --- a/db/re/item_db.conf +++ b/db/re/item_db.conf @@ -34,97 +34,97 @@ item_db: ( ************* Entry structure ************************************************ ****************************************************************************** { - // =================== Mandatory fields =============================== - Id: ID (int) - AegisName: "Aegis_Name" (string) - Name: "Item Name" (string) - // =================== Optional fields ================================ - Type: Item Type (string, defaults to "IT_ETC") - Buy: Buy Price (int, defaults to Sell * 2) - Sell: Sell Price (int, defaults to Buy / 2) - Weight: Item Weight (int, defaults to 0) - Atk: Attack (int, defaults to 0) - Matk: Magical Attack (int, defaults to 0, ignored in pre-re) - Def: Defense (int, defaults to 0) - Range: Attack Range (int, defaults to 0) - MinRange: Minimal Attack Range (int, defaults to 0) - Slots: Slots (int, defaults to 0) - Job: Job mask (int, defaults to all jobs = 0xFFFFFFFF) - Upper: Upper mask (bitmask array, string or int, defaults to "ITEMUPPER_ALL") - Gender: Gender (string, defaults to "SEX_ANY") - Loc: Equip location (bitmask array, string or int, required value for equipment) - WeaponLv: Weapon Level (int, defaults to 0) - EquipLv: Equip required level (int, defaults to 0) - EquipLv: [min, max] (alternative syntax with min / max level) - Refine: Refineable (boolean, defaults to true) - DisableOptions: true/false (boolean, defaults to false !!for equipments only!!) [Smokexyz] - Subtype: Item Subtype (int, defaults to 0) - ViewSprite: Sprite view ID (int, defaults to 0) - BindOnEquip: true/false (boolean, defaults to false) - ForceSerial: true/false (boolean, defaults to false) - BuyingStore: true/false (boolean, defaults to false) - Delay: Delay to use item (int, defaults to 0) - FloorLifeTime: Delay to remove item from ground (int, default flooritem_lifetime) - KeepAfterUse: true/false (boolean, defaults to false) - DropAnnounce: true/false (boolean, defaults to false) - ShowDropEffect: true/false (boolean, defaults to false) - DropEffectMode: Effect Type (int, default to 0) - AllowPickup: true/false (boolean, defaults to true) - Charm: true/false (boolean, defaults to false) - MaxFloorOffset: [x, y] (int, defaults to 8) - MaxFloorOffset: offset (int, defaults to 8) - Identified: true/false (boolean, default to true) - RequiredStr: required strength (int, default to 0) - RequiredAgi: required agility (int, default to 0) - RequiredVit: required vitality (int, default to 0) - RequiredInt: required intellect (int, default to 0) - RequiredDex: required dexterity (int, default to 0) - RequiredLuk: required luck (int, default to 0) - RequiredMaxHp: required max hp (int, default to 0) - RequiredMaxSp: required max sp (int, default to 0) - RequiredAtk: required attack (int, default to 0) - RequiredMAtkMin: required minimal magic attack (int, default to 0) - RequiredMAtkMax: required maximum magic attack (int, default to 0) - RequiredDef: required defence (int, default to 0) - RequiredMDef: required magic defence (int, default to 0) - RequiredSkill: required skill (int, default to 0) - UseEffect: effect if use/equip item success (int, default to -1) - UseFailEffect: effect if use/equip item failed (int, default to -1) - UnequipEffect: effect if unequip item success (int, default to -1) - UnequipFailEffect: effect if unequip item failed (int, default to -1) - Trade: { (defaults to no restrictions) - override: GroupID (int, defaults to 100) - nodrop: true/false (boolean, defaults to false) - notrade: true/false (boolean, defaults to false) - partneroverride: true/false (boolean, defaults to false) - noselltonpc: true/false (boolean, defaults to false) - nocart: true/false (boolean, defaults to false) - nostorage: true/false (boolean, defaults to false) - nogstorage: true/false (boolean, defaults to false) - nomail: true/false (boolean, defaults to false) - noauction: true/false (boolean, defaults to false) - } - Nouse: { (defaults to no restrictions) - override: GroupID (int, defaults to 100) - sitting: true/false (boolean, defaults to false) - } - Stack: [amount, type] (int, defaults to 0) - Sprite: SpriteID (int, defaults to 0) - Script: <" - Script - (it can be multi-line) - "> - OnEquipScript: <" OnEquip Script (can also be multi-line) "> - OnUnequipScript: <" OnUnequip Script (can also be multi-line) "> - 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) - } + // =================== Mandatory fields =============================== + Id: ID (int) + AegisName: "Aegis_Name" (string) + Name: "Item Name" (string) + // =================== Optional fields ================================ + Type: Item Type (string, defaults to "IT_ETC") + Buy: Buy Price (int, defaults to Sell * 2) + Sell: Sell Price (int, defaults to Buy / 2) + Weight: Item Weight (int, defaults to 0) + Atk: Attack (int, defaults to 0) + Matk: Magical Attack (int, defaults to 0, ignored in pre-re) + Def: Defense (int, defaults to 0) + Range: Attack Range (int, defaults to 0) + MinRange: Minimal Attack Range (int, defaults to 0) + Slots: Slots (int, defaults to 0) + Job: Job mask (int, defaults to all jobs = 0xFFFFFFFF) + Upper: Upper mask (bitmask array, string or int, defaults to "ITEMUPPER_ALL") + Gender: Gender (string, defaults to "SEX_ANY") + Loc: Equip location (bitmask array, string or int, required value for equipment) + WeaponLv: Weapon Level (int, defaults to 0) + EquipLv: Equip required level (int, defaults to 0) + EquipLv: [min, max] (alternative syntax with min / max level) + Refine: Refineable (boolean, defaults to true) + DisableOptions: true/false (boolean, defaults to false !!for equipments only!!) [Smokexyz] + Subtype: Item Subtype (int, defaults to 0) + ViewSprite: Sprite view ID (int, defaults to 0) + BindOnEquip: true/false (boolean, defaults to false) + ForceSerial: true/false (boolean, defaults to false) + BuyingStore: true/false (boolean, defaults to false) + Delay: Delay to use item (int, defaults to 0) + FloorLifeTime: Delay to remove item from ground (int, default flooritem_lifetime) + KeepAfterUse: true/false (boolean, defaults to false) + DropAnnounce: true/false (boolean, defaults to false) + ShowDropEffect: true/false (boolean, defaults to false) + DropEffectMode: Effect Type (int, default to 0) + AllowPickup: true/false (boolean, defaults to true) + Charm: true/false (boolean, defaults to false) + MaxFloorOffset: [x, y] (int, defaults to 8) + MaxFloorOffset: offset (int, defaults to 8) + Identified: true/false (boolean, default to true) + RequiredStr: required strength (int, default to 0) + RequiredAgi: required agility (int, default to 0) + RequiredVit: required vitality (int, default to 0) + RequiredInt: required intellect (int, default to 0) + RequiredDex: required dexterity (int, default to 0) + RequiredLuk: required luck (int, default to 0) + RequiredMaxHp: required max hp (int, default to 0) + RequiredMaxSp: required max sp (int, default to 0) + RequiredAtk: required attack (int, default to 0) + RequiredMAtkMin: required minimal magic attack (int, default to 0) + RequiredMAtkMax: required maximum magic attack (int, default to 0) + RequiredDef: required defence (int, default to 0) + RequiredMDef: required magic defence (int, default to 0) + RequiredSkill: required skill (int, default to 0) + UseEffect: effect if use/equip item success (int, default to -1) + UseFailEffect: effect if use/equip item failed (int, default to -1) + UnequipEffect: effect if unequip item success (int, default to -1) + UnequipFailEffect: effect if unequip item failed (int, default to -1) + Trade: { (defaults to no restrictions) + override: GroupID (int, defaults to 100) + nodrop: true/false (boolean, defaults to false) + notrade: true/false (boolean, defaults to false) + partneroverride: true/false (boolean, defaults to false) + noselltonpc: true/false (boolean, defaults to false) + nocart: true/false (boolean, defaults to false) + nostorage: true/false (boolean, defaults to false) + nogstorage: true/false (boolean, defaults to false) + nomail: true/false (boolean, defaults to false) + noauction: true/false (boolean, defaults to false) + } + Nouse: { (defaults to no restrictions) + override: GroupID (int, defaults to 100) + sitting: true/false (boolean, defaults to false) + } + Stack: [amount, type] (int, defaults to 0) + Sprite: SpriteID (int, defaults to 0) + Script: <" + Script + (it can be multi-line) + "> + OnEquipScript: <" OnEquip Script (can also be multi-line) "> + OnUnequipScript: <" OnUnequip Script (can also be multi-line) "> + 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) + } }, ******************************************************************************/ @@ -429,7 +429,7 @@ item_db: ( nogstorage: true nomail: true } - OnEquipScript: <" + OnEquipScript: <" if (gettimetick(2) < COOKIE_COOLDOWN) { unequip(EQI_HEAD_MID); //dispbottom l("You need to wait @@ more before equipping this again.", FuzzyTime(COOKIE_COOLDOWN)); @@ -786,14 +786,14 @@ item_db: ( Sell: 0 Weight: 20 KeepAfterUse: true - Trade: { - notrade: true - nodrop: true - noselltonpc: true - nogstorage: true - nomail: true - noauction: true - } + Trade: { + notrade: true + nodrop: true + noselltonpc: true + nogstorage: true + nomail: true + noauction: true + } Script: <" doevent "#MasterBook::OnUse"; "> @@ -942,8 +942,8 @@ item_db: ( @type = 1; if (rand(100) < 50) { getmapxy(.@m$, .@x, .@y, 0); - .@mobGID = monster(.@m$, .@x, .@y, "Maggot", Maggot, 1); - unitattack(.@mobGID, getcharid(3)); + .@mobGID = monster(.@m$, .@x, .@y, "Maggot", Maggot, 1); + unitattack(.@mobGID, getcharid(3)); } doevent "rand_sc_heal::OnUse"; "> @@ -1124,35 +1124,35 @@ item_db: ( "> }, { - Id: 611 - AegisName: "GrassSeeds" - Name: "Grass Seeds" - Type: "IT_USABLE" - Buy: 200 - Sell: 35 - Weight: 3 - Delay: 500 - Script: <" - if (!getmapxy(.@map$, .@x, .@y, 0)) { - monster(.@map$, .@x, .@y, strmobinfo(1, CloverPatch), CloverPatch, 1); - } - "> -}, -{ - Id: 612 - AegisName: "FlowerSeeds" - Name: "Flower Seeds" - Type: "IT_USABLE" - Buy: 500 - Sell: 150 - Weight: 4 - Delay: 500 - Script: <" - if (!getmapxy(.@map$, .@x, .@y, 0)) { - .@mob=callfunc("any", YellowRose, BlueRose, RedRose); - monster(.@map$, .@x, .@y, strmobinfo(1, .@mob), .@mob, 1); - } - "> + Id: 611 + AegisName: "GrassSeeds" + Name: "Grass Seeds" + Type: "IT_USABLE" + Buy: 200 + Sell: 35 + Weight: 3 + Delay: 500 + Script: <" + if (!getmapxy(.@map$, .@x, .@y, 0)) { + monster(.@map$, .@x, .@y, strmobinfo(1, CloverPatch), CloverPatch, 1); + } + "> +}, +{ + Id: 612 + AegisName: "FlowerSeeds" + Name: "Flower Seeds" + Type: "IT_USABLE" + Buy: 500 + Sell: 150 + Weight: 4 + Delay: 500 + Script: <" + if (!getmapxy(.@map$, .@x, .@y, 0)) { + .@mob=callfunc("any", YellowRose, BlueRose, RedRose); + monster(.@map$, .@x, .@y, strmobinfo(1, .@mob), .@mob, 1); + } + "> }, { Id: 613 @@ -1170,6 +1170,20 @@ item_db: ( dispbottom l("Yuck! I won't drink this!"); "> }, +{ + Id: 614 + AegisName: "SailorStew" + Name: "Sailor's Stew" + Type: "IT_USABLE" + Buy: 50000 + Sell: 10 + Weight: 650 + Delay: 1000 + Script: <" + sc_start SC_ATTHASTE_POTION1, 80000, 300; // These are totally placeholders. We want STR + 10 and VIT + 5 and max. HP + 2000 for three minutes. + sc_start SC_INCHITRATE, 80000, 300; + "> +}, // Generic { @@ -1722,6 +1736,33 @@ item_db: ( Weight: 25 }, { + Id: 758 + AegisName: "SmallMushroom" + Name: "Small Mushroom" + Type: "IT_ETC" + Buy: 500 + Sell: 80 + Weight: 75 +}, +{ + Id: 759 + AegisName: "BlackScorpionStinger" + Name: "Black Scorpion Stinger" + Type: "IT_ETC" + Buy: 1000 + Sell: 100 + Weight: 200 +}, +{ + Id: 760 + AegisName: "GoldenScorpionStinger" + Name: "Golden Scorpion Stinger" + Type: "IT_ETC" + Buy: 25000 + Sell: 8500 + Weight: 500 +}, +{ Id: 800 AegisName: "DiamondShard" Name: "Diamond Shard" @@ -1781,6 +1822,33 @@ item_db: ( Weight: 10 Slots: 0 }, +{ + Id: 806 + AegisName: "EmptyBowl" + Name: "Empty Bowl" + Type: "IT_ETC" + Buy: 50000 + Sell: 5000 + Weight: 150 + Slots: 0 +}, +{ + Id: 807 + AegisName: "ClothesPack" + Name: "Clothes Pack" + Type: "IT_ETC" + Buy: 0 + Sell: 0 + Weight: 25 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + noauction: true + nomail: true + nogstorage: true + } +}, // Necklaces { Id: 1000 @@ -1817,7 +1885,7 @@ item_db: ( Buy: 70 Sell: 18 Weight: 17 - Def: 50 + Def: 1 Slots: 0 Loc: "EQP_HEAD_MID" WeaponLv: 0 @@ -1834,7 +1902,7 @@ item_db: ( Buy: 1800 Sell: 200 Weight: 30 - Def: 140 + Def: 6 Slots: 1 Loc: "EQP_HEAD_MID" WeaponLv: 0 @@ -1856,7 +1924,7 @@ item_db: ( Buy: 1200 Sell: 120 Weight: 11 - Def: 100 + Def: 2 Slots: 1 Loc: "EQP_HEAD_MID" WeaponLv: 0 @@ -1894,7 +1962,7 @@ item_db: ( Buy: 1900 Sell: 250 Weight: 22 - Def: 180 + Def: 6 Slots: 0 Loc: "EQP_HEAD_MID" WeaponLv: 0 @@ -1911,7 +1979,7 @@ item_db: ( Buy: 4500 Sell: 300 Weight: 120 - Def: 200 + Def: 7 Slots: 0 Loc: "EQP_HEAD_MID" WeaponLv: 0 @@ -1928,7 +1996,7 @@ item_db: ( Buy: 12000 Sell: 800 Weight: 340 - Def: 400 + Def: 10 Slots: 0 Loc: "EQP_HEAD_MID" WeaponLv: 0 @@ -1945,7 +2013,7 @@ item_db: ( Buy: 25000 Sell: 7300 Weight: 170 - Def: 350 + Def: 11 Slots: 0 Loc: "EQP_HEAD_MID" WeaponLv: 0 @@ -1965,7 +2033,7 @@ item_db: ( Buy: 35000 Sell: 2900 Weight: 70 - Def: 100 + Def: 6 Slots: 0 Loc: "EQP_HEAD_MID" WeaponLv: 0 @@ -1976,6 +2044,7 @@ item_db: ( Script: <" bonus bInt, 3; bonus bAgi, 1; + bonus bMatk, 30; "> }, { @@ -1986,7 +2055,7 @@ item_db: ( Buy: 12000 Sell: 2600 Weight: 240 - Def: 250 + Def: 10 Slots: 1 Loc: "EQP_HEAD_MID" WeaponLv: 0 @@ -2024,7 +2093,7 @@ item_db: ( Buy: 75000 Sell: 8500 Weight: 1500 - Def: 350 + Def: 28 Slots: 0 Loc: "EQP_HEAD_MID" WeaponLv: 0 @@ -2046,7 +2115,7 @@ item_db: ( Buy: 55000 Sell: 13000 Weight: 680 - Def: 550 + Def: 18 Slots: 0 Loc: "EQP_HEAD_MID" WeaponLv: 0 @@ -2056,6 +2125,33 @@ item_db: ( BindOnEquip: false }, { + Id: 1311 + AegisName: "GoldenWarlordPlate" + Name: "Golden Warlord Plate" + Type: "IT_ARMOR" + Buy: 150000 + Sell: 45000 + Weight: 3500 + Def: 65 + Slots: 0 + Loc: "EQP_HEAD_MID" + WeaponLv: 0 + EquipLv: 50 + Refine: false + ViewSprite: 1311 + BindOnEquip: false + BuyingStore: true + Script: <" + bonus bStr, 4; + bonus bVit, 2; + "> + Trade: { + nodrop: true + noselltonpc: true + } +}, +// Boots +{ Id: 1800 AegisName: "LousyMoccasins" Name: "Lousy Moccasins" @@ -2063,7 +2159,7 @@ item_db: ( Buy: 600 Sell: 180 Weight: 18 - Def: 100 + Def: 1 Slots: 0 Loc: "EQP_SHOES" WeaponLv: 0 @@ -2080,7 +2176,7 @@ item_db: ( Buy: 2600 Sell: 420 Weight: 35 - Def: 120 + Def: 2 Slots: 1 Loc: "EQP_SHOES" WeaponLv: 0 @@ -2118,7 +2214,7 @@ item_db: ( Buy: 12000 Sell: 650 Weight:75 - Def: 35 + Def: 4 Slots: 0 Loc: "EQP_SHOES" WeaponLv: 0 @@ -2136,7 +2232,7 @@ item_db: ( Buy: 15000 Sell: 900 Weight: 60 - Def: 27 + Def: 4 Loc: "EQP_SHOES" WeaponLv: 0 EquipLv: 20 @@ -2145,6 +2241,7 @@ item_db: ( BindOnEquip: false BuyingStore: true }, +// Gloves { Id: 2000 AegisName: "Armbands" @@ -2153,7 +2250,7 @@ item_db: ( Buy: 400 Sell: 120 Weight: 10 - Def: 80 + Def: 1 Slots: 0 Loc: "EQP_GARMENT" WeaponLv: 0 @@ -2170,7 +2267,7 @@ item_db: ( Buy: 4000 Sell: 800 Weight: 20 - Def: 120 + Def: 2 Slots: 0 Loc: "EQP_GARMENT" WeaponLv: 0 @@ -2187,7 +2284,7 @@ item_db: ( Buy: 7500 Sell: 940 Weight: 30 - Def: 180 + Def: 3 Slots: 0 Loc: "EQP_GARMENT" WeaponLv: 0 @@ -2204,7 +2301,7 @@ item_db: ( Buy: 3000 Sell: 250 Weight: 60 - Def: 10 + Def: 1 Slots: 1 Loc: "EQP_GARMENT" WeaponLv: 0 @@ -2242,7 +2339,7 @@ item_db: ( Buy: 3500 Sell: 500 Weight: 140 - Def: 20 + Def: 3 Slots: 0 Loc: "EQP_GARMENT" WeaponLv: 0 @@ -2259,7 +2356,7 @@ item_db: ( Buy: 8500 Sell: 650 Weight: 85 - Def: 20 + Def: 4 Slots: 0 Loc: "EQP_GARMENT" WeaponLv: 0 @@ -2268,6 +2365,7 @@ item_db: ( ViewSprite: 2005 BindOnEquip: false }, +// Pants { Id: 2200 AegisName: "CreasedShorts" @@ -2276,7 +2374,7 @@ item_db: ( Buy: 60 Sell: 15 Weight: 20 - Def: 60 + Def: 1 Slots: 0 Loc: "EQP_HEAD_LOW" WeaponLv: 0 @@ -2293,7 +2391,7 @@ item_db: ( Buy: 1200 Sell: 250 Weight: 35 - Def: 140 + Def: 2 Slots: 0 Loc: "EQP_HEAD_LOW" WeaponLv: 0 @@ -2312,7 +2410,7 @@ item_db: ( Weight: 360 Atk: 0 Matk: -100 - Def: 240 + Def: 3 Slots: 0 Loc: "EQP_HEAD_LOW" WeaponLv: 0 @@ -2329,7 +2427,7 @@ item_db: ( Buy: 5000 Sell: 1000 Weight: 20 - Def: 80 + Def: 3 Slots: 1 Loc: "EQP_HEAD_LOW" WeaponLv: 0 @@ -2351,7 +2449,7 @@ item_db: ( Buy: 3000 Sell: 600 Weight: 15 - Def: 20 + Def: 1 Slots: 1 Loc: "EQP_HEAD_LOW" WeaponLv: 0 @@ -2389,7 +2487,7 @@ item_db: ( Buy: 9500 Sell: 2100 Weight: 280 - Def: 160 + Def: 3 Slots: 0 Loc: "EQP_HEAD_LOW" WeaponLv: 0 @@ -2406,7 +2504,7 @@ item_db: ( Buy: 9500 Sell: 1100 Weight: 110 - Def: 105 + Def: 6 Slots: 0 Loc: "EQP_HEAD_LOW" WeaponLv: 0 @@ -2415,6 +2513,7 @@ item_db: ( ViewSprite: 2206 BindOnEquip: false }, +// Shields { Id: 2700 AegisName: "Barrel" @@ -2423,7 +2522,7 @@ item_db: ( Buy: 150 Sell: 50 Weight: 400 - Def: 100 + Def: 2 Slots: 0 Loc: "EQP_HAND_L" WeaponLv: 0 @@ -2445,7 +2544,7 @@ item_db: ( Buy: 2000 Sell: 250 Weight: 100 - Def: 50 + Def: 2 Loc: "EQP_HAND_L" EquipLv: 5 Refine: false @@ -2463,7 +2562,7 @@ item_db: ( Buy: 5000 Sell: 750 Weight: 2450 - Def: 72 + Def: 6 Loc: "EQP_HAND_L" EquipLv: 12 Refine: false @@ -2481,7 +2580,7 @@ item_db: ( Buy: 25000 Sell: 2630 Weight: 5500 - Def: 200 + Def: 12 Matk: -200 Loc: "EQP_HAND_L" EquipLv: 20 @@ -2492,6 +2591,7 @@ item_db: ( bonus bAtkRange, -1; "> }, +// Headgear { Id: 2900 AegisName: "Bandana" @@ -2500,7 +2600,7 @@ item_db: ( Buy: 950 Sell: 220 Weight: 4 - Def: 40 + Def: 1 Slots: 0 Loc: "EQP_HEAD_TOP" WeaponLv: 0 @@ -2517,7 +2617,7 @@ item_db: ( Buy: 320 Sell: 100 Weight: 50 - Def: 20 + Def: 1 Slots: 0 Loc: "EQP_HEAD_TOP" WeaponLv: 0 @@ -2534,7 +2634,7 @@ item_db: ( Buy: 320 Sell: 100 Weight: 11 - Def: 20 + Def: 1 Slots: 0 Loc: "EQP_HEAD_TOP" WeaponLv: 0 @@ -2551,7 +2651,7 @@ item_db: ( Buy: 1000 Sell: 240 Weight: 20 - Def: 100 + Def: 1 Slots: 0 Loc: "EQP_HEAD_TOP" WeaponLv: 0 @@ -2568,7 +2668,7 @@ item_db: ( Buy: 1600 Sell: 300 Weight: 23 - Def: 110 + Def: 1 Slots: 0 Loc: "EQP_HEAD_TOP" WeaponLv: 0 @@ -2585,9 +2685,9 @@ item_db: ( Buy: 1600 Sell: 300 Weight: 22 - Def: 110 + Def: 1 Slots: 0 - Loc: "EQP_HEAD_LOW" + Loc: "EQP_HEAD_TOP" WeaponLv: 0 EquipLv: 1 Refine: false @@ -2605,7 +2705,7 @@ item_db: ( Weight: 400 Atk: 0 Matk: -50 - Def: 160 + Def: 2 Slots: 0 Loc: "EQP_HEAD_TOP" WeaponLv: 0 @@ -2624,7 +2724,7 @@ item_db: ( Weight: 500 Atk: 0 Matk: -25 - Def: 180 + Def: 4 Slots: 0 Loc: "EQP_HEAD_TOP" WeaponLv: 0 @@ -2649,7 +2749,7 @@ item_db: ( Weight: 1000 Atk: 0 Matk: -300 - Def: 340 + Def: 6 Slots: 0 Loc: "EQP_HEAD_TOP" WeaponLv: 0 @@ -2668,7 +2768,7 @@ item_db: ( Weight: 50 Atk: 0 Matk: 25 - Def: 12 + Def: 1 Slots: 0 Loc: "EQP_HEAD_TOP" WeaponLv: 0 @@ -2687,7 +2787,7 @@ item_db: ( Weight: 5 Atk: 0 Matk: 7 - Def: 7 + Def: 2 Slots: 0 Loc: "EQP_HEAD_TOP" WeaponLv: 0 @@ -2704,7 +2804,7 @@ item_db: ( Buy: 50000 Sell: 12500 Weight: 40 - Def: 50 + Def: 4 Slots: 0 Loc: "EQP_HEAD_TOP" WeaponLv: 0 @@ -2721,7 +2821,7 @@ item_db: ( Buy: 17355 Sell: 4300 Weight: 30 - Def: 40 + Def: 3 Slots: 0 Loc: "EQP_HEAD_TOP" WeaponLv: 0 @@ -2729,6 +2829,10 @@ item_db: ( Refine: false ViewSprite: 2912 BindOnEquip: false + Trade: { + nodrop: true + noselltonpc: true + } }, { Id: 2913 @@ -2738,7 +2842,7 @@ item_db: ( Buy: 6300 Sell: 1200 Weight: 5 - Def: 25 + Def: 2 Slots: 0 Loc: "EQP_HEAD_TOP" WeaponLv: 0 @@ -2755,7 +2859,7 @@ item_db: ( Buy: 25000 Sell: 5200 Weight: 150 - Def: 20 + Def: 3 Slots: 0 Loc: "EQP_HEAD_TOP" WeaponLv: 0 @@ -2774,7 +2878,7 @@ item_db: ( Weight: 50 Atk: 0 Matk: 10 - Def: 10 + Def: 2 Slots: 0 Loc: "EQP_HEAD_TOP" WeaponLv: 0 @@ -2791,7 +2895,7 @@ item_db: ( Buy: 9560 Sell: 780 Weight: 30 - Def: 15 + Def: 5 Slots: 0 Loc: "EQP_HEAD_TOP" WeaponLv: 0 @@ -2801,6 +2905,203 @@ item_db: ( BindOnEquip: false }, { + Id: 2917 + AegisName: "BrownBowlerHat" + Name: "Brown Bowler Hat" + Type: "IT_ARMOR" + Buy: 17355 + Sell: 4300 + Weight: 30 + Def: 3 + Slots: 0 + Loc: "EQP_HEAD_TOP" + WeaponLv: 0 + EquipLv: 15 + Refine: false + ViewSprite: 2917 + BindOnEquip: false + Trade: { + nodrop: true + noselltonpc: true + } +}, +{ + Id: 2918 + AegisName: "CatEars" + Name: "Cat Ears" + Type: "IT_ARMOR" + Buy: 37500 + Sell: 12500 + Weight: 10 + Def: 3 + Slots: 0 + Loc: "EQP_HEAD_TOP" + WeaponLv: 0 + EquipLv: 35 + Refine: false + ViewSprite: 2918 + BindOnEquip: false + Script: <" + bonus bAgi, 3; + "> + Trade: { + nodrop: true + noselltonpc: true + } +}, +{ + Id: 2919 + AegisName: "SantaHat" + Name: "Santa Hat" + Type: "IT_ARMOR" + Buy: 950 + Sell: 220 + Weight: 28 + Def: 1 + Slots: 0 + Loc: "EQP_HEAD_TOP" + WeaponLv: 0 + EquipLv: 5 + Refine: false + ViewSprite: 2919 + BindOnEquip: false + Trade: { + nodrop: true + noselltonpc: true + } +}, +{ + Id: 2920 + AegisName: "MoonshroomHat" + Name: "Moonshroom Hat" + Type: "IT_ARMOR" + Buy: 950 + Sell: 220 + Weight: 50 + Def: 7 + Slots: 0 + Loc: "EQP_HEAD_TOP" + WeaponLv: 0 + EquipLv: 5 + Refine: false + ViewSprite: 2920 + BindOnEquip: false + Script: <" + bonus bInt, 3; + bonus bStr, -1; + "> + Trade: { + nodrop: true + noselltonpc: true + } +}, +{ + Id: 2921 + AegisName: "SantaBeardHat" + Name: "Santa Beard Hat" + Type: "IT_ARMOR" + Buy: 950 + Sell: 220 + Weight: 32 + Def: 1 + Slots: 0 + Loc: "EQP_HEAD_TOP" + WeaponLv: 0 + EquipLv: 5 + Refine: false + ViewSprite: 2921 + BindOnEquip: false + Trade: { + nodrop: true + noselltonpc: true + } +}, +{ + Id: 2922 + AegisName: "FunkyHat" + Name: "Funky Hat" + Type: "IT_ARMOR" + Buy: 950 + Sell: 220 + Weight: 50 + Def: 2 + Slots: 0 + Loc: "EQP_HEAD_TOP" + WeaponLv: 0 + EquipLv: 5 + Refine: false + ViewSprite: 2922 + BindOnEquip: false + Trade: { + nodrop: true + noselltonpc: true + } + AllowCards: { + 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: 2923 + AegisName: "CashierShade" + Name: "Cashier Shade" + Type: "IT_ARMOR" + Buy: 950 + Sell: 220 + Weight: 28 + Def: 1 + Slots: 0 + Loc: "EQP_HEAD_TOP" + WeaponLv: 0 + EquipLv: 5 + Refine: false + ViewSprite: 2923 + BindOnEquip: false + Trade: { + nodrop: true + noselltonpc: true + } +}, +{ + Id: 2924 + AegisName: "BeanieCopter" + Name: "Beanie Copter" + Type: "IT_ARMOR" + Buy: 950 + Sell: 220 + Weight: 20 + Def: 4 + Slots: 0 + Loc: "EQP_HEAD_TOP" + WeaponLv: 0 + EquipLv: 3 + Refine: false + ViewSprite: 2924 + BindOnEquip: false + Trade: { + nodrop: true + noselltonpc: true + } +}, +// Scarfs +{ Id: 3200 AegisName: "Shemagh" Name: "Shemagh" @@ -2808,7 +3109,7 @@ item_db: ( Buy: 1000 Sell: 90 Weight: 22 - Def: 50 + Def: 1 Loc: "EQP_ACC_R" EquipLv: 3 Refine: false @@ -2823,7 +3124,7 @@ item_db: ( Buy: 6500 Sell: 450 Weight: 45 - Def: 75 + Def: 1 Loc: "EQP_ACC_R" EquipLv: 30 Refine: false @@ -2831,6 +3132,26 @@ item_db: ( BindOnEquip: false }, { + Id: 3202 + AegisName: "Eyepatch" + Name: "Eyepatch" + Type: "IT_ARMOR" + Buy: 1000 + Sell: 250 + Weight: 8 + Def: 1 + Loc: "EQP_ACC_R" + EquipLv: 16 + Refine: false + ViewSprite: 3202 + BindOnEquip: false + Trade: { + nodrop: true + noselltonpc: true + } +}, +// Weapons +{ Id: 3500 AegisName: "Knife" Name: "Knife" @@ -2838,7 +3159,7 @@ item_db: ( Buy: 90 Sell: 25 Weight: 6 - Atk: 50 + Atk: 10 Matk: 0 Range: 0 Slots: 0 @@ -2858,7 +3179,7 @@ item_db: ( Buy: 1100 Sell: 300 Weight: 26 - Atk: 150 + Atk: 25 Matk: 0 Range: 0 Slots: 0 @@ -2877,7 +3198,7 @@ item_db: ( Buy: 5000 Sell: 400 Weight: 58 - Atk: 350 + Atk: 40 Matk: 0 Range: 0 Slots: 0 @@ -2915,7 +3236,7 @@ item_db: ( Buy: 25800 Sell: 1200 Weight: 86 - Atk: 800 + Atk: 120 Matk: 0 Range: 0 Slots: 0 @@ -2934,7 +3255,7 @@ item_db: ( Buy: 20000 Sell: 1500 Weight: 67 - Atk: 150 + Atk: 10 Matk: 250 Range: 0 Slots: 0 @@ -2963,7 +3284,7 @@ item_db: ( Buy: 12500 Sell: 1000 Weight: 150 - Atk: 200 + Atk: 10 Matk: 150 Range: 0 Slots: 0 @@ -2992,9 +3313,9 @@ item_db: ( Buy: 104800 Sell: 1750 Weight: 1200 - Atk: 600 + Atk: 100 Matk: 0 - Def: 200 + Def: 2 Range: 2 Slots: 0 Loc: ["EQP_HAND_R","EQP_HAND_L"] @@ -3012,7 +3333,7 @@ item_db: ( Buy: 2500 Sell: 500 Weight: 350 - Atk: 100 + Atk: 120 Matk: 0 Range: 0 Slots: 0 @@ -3032,13 +3353,13 @@ item_db: ( Buy: 25000 Sell: 5000 Weight: 250 - Atk: 600 + Atk: 150 Matk: 0 Range: 0 Slots: 0 Loc: "EQP_HAND_R" WeaponLv: 1 - EquipLv: 1 + EquipLv: 20 Refine: false Subtype: "W_DAGGER" ViewSprite: 1 @@ -3052,7 +3373,7 @@ item_db: ( Buy: 17500 Sell: 3700 Weight: 250 - Atk: 200 + Atk: 130 Matk: 0 Range: 0 Slots: 0 @@ -3071,7 +3392,7 @@ item_db: ( Buy: 2500 Sell: 500 Weight: 100 - Atk: 150 + Atk: 85 Matk: 0 Range: 0 Slots: 0 @@ -3096,9 +3417,9 @@ item_db: ( Buy: 12000 Sell: 2000 Weight: 500 - Atk: 300 + Atk: 80 Matk: 0 - Def: 20 + Def: 2 Range: 0 Slots: 0 Loc: "EQP_HAND_R" @@ -3116,7 +3437,7 @@ item_db: ( Buy: 10000 Sell: 1500 Weight: 800 - Atk: 400 + Atk: 80 Matk: 0 Def: 50 Range: 2 @@ -3136,9 +3457,9 @@ item_db: ( Buy: 25000 Sell: 7500 Weight: 1200 - Atk: 600 + Atk: 170 Matk: 0 - Def: 80 + Def: 8 Range: 2 Slots: 0 Loc: ["EQP_HAND_R", "EQP_HAND_L"] @@ -3149,6 +3470,40 @@ item_db: ( BindOnEquip: false }, { + Id: 3515 + AegisName: "SharpKnife" + Name: "Sharp Knife" + Type: "IT_WEAPON" + Buy: 180 + Sell: 50 + Weight: 15 + Atk: 120 + Loc: "EQP_HAND_R" + WeaponLv: 1 + EquipLv: 1 + Refine: false + Subtype: "W_DAGGER" + BindOnEquip: false +}, +{ + Id: 3516 + AegisName: "BoneKnife" + Name: "Bone Knife" + Type: "IT_WEAPON" + Buy: 20000 + Sell: 4000 + Weight: 250 + Atk: 125 + Loc: "EQP_HAND_R" + WeaponLv: 1 + EquipLv: 15 + Refine: false + Subtype: "W_DAGGER" + ViewSprite: 1 + BindOnEquip: false +}, +// Pet Eggs +{ Id: 4000 AegisName: "PiouEgg" Name: "Piou egg" @@ -3160,6 +3515,7 @@ item_db: ( bpet; "> }, +// Cards & Dyes { Id: 5000 AegisName: "CrimsonCashmereDye" @@ -3496,6 +3852,7 @@ item_db: ( "> Loc: ["EQP_ACC_L"] }, +// Bows { Id: 6000 AegisName: "WoodenBow" @@ -3504,9 +3861,9 @@ item_db: ( Buy: 550 Sell: 52 Weight: 12 - Atk: 150 + Atk: 40 Range: 4 - MinRange: 3 + MinRange: 2 Loc: ["EQP_HAND_R", "EQP_HAND_L"] WeaponLv: 1 EquipLv: 5 @@ -3523,9 +3880,9 @@ item_db: ( Buy: 1200 Sell: 250 Weight: 260 - Atk: 100 + Atk: 115 Range: 5 - MinRange: 3 + MinRange: 2 Loc: ["EQP_HAND_R", "EQP_HAND_L"] WeaponLv: 1 EquipLv: 15 @@ -3544,7 +3901,7 @@ item_db: ( Weight: 480 Atk: 150 Range: 6 - MinRange: 3 + MinRange: 2 Loc: ["EQP_HAND_R", "EQP_HAND_L"] WeaponLv: 1 EquipLv: 20 @@ -3553,6 +3910,7 @@ item_db: ( Id6500: 1 } }, +// Ammo { Id: 6500 AegisName: "TrainingArrow" @@ -3561,17 +3919,669 @@ item_db: ( Buy: 3 Sell: 1 Weight: 1 - Atk: 100 + Atk: 5 Loc: "EQP_AMMO" Subtype: "A_ARROW" }, +// Misc. +{ + Id: 7420 + AegisName: "AdventurerSoul" + Name: "Adventurer's Soul" + Type: "IT_ETC" + Buy: 1 + Sell: 0 + Weight: 0 +}, +// LEGACY merge items, generic or usable +{ + Id: 8000 + AegisName: "BlackPearl" + Name: "Black Pearl" + Type: "IT_ETC" + Buy: 100 + Sell: 5 + Weight: 100 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + noauction: true + nomail: true + nogstorage: true + } +}, +{ + Id: 8001 + AegisName: "Bloodstone" + Name: "Bloodstone" + Type: "IT_ETC" + Buy: 100 + Sell: 5 + Weight: 100 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + noauction: true + nomail: true + nogstorage: true + } +}, +{ + Id: 8002 + AegisName: "BottleOfSand" + Name: "Bottle of Sand" + Type: "IT_ETC" + Buy: 100 + Sell: 5 + Weight: 200 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + noauction: true + nomail: true + nogstorage: true + } +}, +{ + Id: 8003 + AegisName: "Brainstem" + Name: "Brainstem" + Type: "IT_ETC" + Buy: 100 + Sell: 5 + Weight: 50 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + noauction: true + nomail: true + nogstorage: true + } +}, +{ + Id: 8004 + AegisName: "ClosedChristmasBox" + Name: "Closed Christmas Box" + Type: "IT_ETC" + Buy: 100 + Sell: 5 + Weight: 100 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + noauction: true + nomail: true + nogstorage: true + } +}, +{ + Id: 8005 + AegisName: "OpenChristmasBox" + Name: "Open Christmas Box" + Type: "IT_ETC" + Buy: 100 + Sell: 5 + Weight: 100 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + noauction: true + nomail: true + nogstorage: true + } +}, +{ + Id: 8006 + AegisName: "RedChristmasOrnament" + Name: "Red Christmas Ornament" + Type: "IT_ETC" + Buy: 100 + Sell: 5 + Weight: 20 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + noauction: true + nomail: true + nogstorage: true + } +}, +{ + Id: 8007 + AegisName: "YellowChristmasOrnament" + Name: "Yellow Christmas Ornament" + Type: "IT_ETC" + Buy: 100 + Sell: 5 + Weight: 20 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + noauction: true + nomail: true + nogstorage: true + } +}, +{ + Id: 8008 + AegisName: "GreenChristmasOrnament" + Name: "Green Christmas Ornament" + Type: "IT_ETC" + Buy: 100 + Sell: 5 + Weight: 20 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + noauction: true + nomail: true + nogstorage: true + } +}, +{ + Id: 8009 + AegisName: "AquaChristmasOrnament" + Name: "Aqua Christmas Ornament" + Type: "IT_ETC" + Buy: 100 + Sell: 5 + Weight: 20 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + noauction: true + nomail: true + nogstorage: true + } +}, +{ + Id: 8010 + AegisName: "BlueChristmasOrnament" + Name: "Blue Christmas Ornament" + Type: "IT_ETC" + Buy: 100 + Sell: 5 + Weight: 20 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + noauction: true + nomail: true + nogstorage: true + } +}, +{ + Id: 8011 + AegisName: "PurpleChristmasOrnament" + Name: "Purple Christmas Ornament" + Type: "IT_ETC" + Buy: 100 + Sell: 5 + Weight: 20 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + noauction: true + nomail: true + nogstorage: true + } +}, +{ + Id: 8012 + AegisName: "Doll" + Name: "Doll" + Type: "IT_ETC" + Buy: 100 + Sell: 5 + Weight: 75 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + noauction: true + nomail: true + nogstorage: true + } +}, +{ + Id: 8013 + AegisName: "EasterBasket" + Name: "Easter Basket" + Type: "IT_ETC" + Buy: 100 + Sell: 5 + Weight: 2000 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + noauction: true + nomail: true + nogstorage: true + } +}, +{ + Id: 8014 + AegisName: "LegendaryEasterEgg" + Name: "Legendary Easter Egg" + Type: "IT_ETC" + Buy: 100 + Sell: 5 + Weight: 50 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + noauction: true + nomail: true + nogstorage: true + } +}, +{ + Id: 8015 + AegisName: "FakePlasticFangs" + Name: "Fake Plastic Fangs" + Type: "IT_ETC" + Buy: 100 + Sell: 5 + Weight: 25 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + noauction: true + nomail: true + nogstorage: true + } +}, +{ + Id: 8016 + AegisName: "FlawedLens" + Name: "Flawed Lens" + Type: "IT_ETC" + Buy: 100 + Sell: 5 + Weight: 50 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + noauction: true + nomail: true + nogstorage: true + } +}, +{ + Id: 8017 + AegisName: "DarkPetal" + Name: "Dark Petal" + Type: "IT_ETC" + Buy: 100 + Sell: 5 + Weight: 250 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + noauction: true + nomail: true + nogstorage: true + } +}, { - Id: 7420 - AegisName: "AdventurerSoul" - Name: "Adventurer's Soul" - Type: "IT_ETC" - Buy: 1 - Sell: 0 - Weight: 0 + Id: 8018 + AegisName: "FlightTalisman" + Name: "Flight Talisman" + Type: "IT_ETC" + Buy: 100 + Sell: 5 + Weight: 500 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + noauction: true + nomail: true + nogstorage: true + } +}, +{ + Id: 8019 + AegisName: "Jellybeans" + Name: "Jellybeans" + Type: "IT_ETC" + Buy: 100 + Sell: 5 + Weight: 150 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + noauction: true + nomail: true + nogstorage: true + } +}, +{ + Id: 8020 + AegisName: "Leatherball" + Name: "Leatherball" + Type: "IT_ETC" + Buy: 100 + Sell: 5 + Weight: 750 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + noauction: true + nomail: true + nogstorage: true + } +}, +{ + Id: 8021 + AegisName: "BooberryBlueLollipop" + Name: "Booberry Blue Lollipop" + Type: "IT_USABLE" + Buy: 100 + Sell: 5 + Weight: 150 + Script: <" + @min = 1500; + @max = 2500; + @delay = 3; + @type = 1; + doevent "rand_sc_heal::OnUse"; + "> + Trade: { + nodrop: true + notrade: true + noselltonpc: true + noauction: true + nomail: true + nogstorage: true + } +}, +{ + Id: 8022 + AegisName: "GhastlyGreenLollipop" + Name: "Ghastly Green Lollipop" + Type: "IT_USABLE" + Buy: 100 + Sell: 5 + Weight: 150 + Script: <" + @min = 1500; + @max = 2500; + @delay = 3; + @type = 1; + doevent "rand_sc_heal::OnUse"; + "> + Trade: { + nodrop: true + notrade: true + noselltonpc: true + noauction: true + nomail: true + nogstorage: true + } +}, +{ + Id: 8023 + AegisName: "BloodRedLollipop" + Name: "Blood Red Lollipop" + Type: "IT_USABLE" + Buy: 100 + Sell: 5 + Weight: 150 + Script: <" + @min = 1500; + @max = 2500; + @delay = 3; + @type = 1; + doevent "rand_sc_heal::OnUse"; + "> + Trade: { + nodrop: true + notrade: true + noselltonpc: true + noauction: true + nomail: true + nogstorage: true + } +}, +{ + Id: 8024 + AegisName: "PlushMouboo" + Name: "Plush Mouboo" + Type: "IT_ETC" + Buy: 100 + Sell: 5 + Weight: 250 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + noauction: true + nomail: true + nogstorage: true + } +}, +{ + Id: 8025 + AegisName: "RedStocking" + Name: "Red Stocking" + Type: "IT_ETC" + Buy: 100 + Sell: 5 + Weight: 100 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + noauction: true + nomail: true + nogstorage: true + } +}, +{ + Id: 8026 + AegisName: "StickReinboo" + Name: "Stick Reinboo" + Type: "IT_ETC" + Buy: 100 + Sell: 5 + Weight: 100 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + noauction: true + nomail: true + nogstorage: true + } +}, +{ + Id: 8027 + AegisName: "RubberBat" // add squeak sound with approx. 3 ~ 5s delay. + Name: "Rubber Bat" + Type: "IT_ETC" + Buy: 100 + Sell: 5 + Weight: 30 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + noauction: true + nomail: true + nogstorage: true + } +}, +{ + Id: 8028 + AegisName: "SantaCookie" + Name: "Santa Cookie" + Type: "IT_ETC" + Buy: 100 + Sell: 5 + Weight: 25 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + noauction: true + nomail: true + nogstorage: true + } +}, +{ + Id: 8029 + AegisName: "SantaGlobe" + Name: "Santa Globe" + Type: "IT_ETC" + Buy: 100 + Sell: 5 + Weight: 500 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + noauction: true + nomail: true + nogstorage: true + } +}, +{ + Id: 8030 + AegisName: "Scissors" + Name: "Scissors" + Type: "IT_ETC" + Buy: 100 + Sell: 5 + Weight: 150 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + noauction: true + nomail: true + nogstorage: true + } +}, +{ + Id: 8031 + AegisName: "SilverBell" + Name: "Silver Bell" + Type: "IT_ETC" + Buy: 100 + Sell: 5 + Weight: 250 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + noauction: true + nomail: true + nogstorage: true + } +}, +{ + Id: 8032 + AegisName: "SnowmanGlobe" + Name: "Snowman Globe" + Type: "IT_ETC" + Buy: 100 + Sell: 5 + Weight: 500 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + noauction: true + nomail: true + nogstorage: true + } +}, +{ + Id: 8033 + AegisName: "StrangeCoin" + Name: "Strange Coin" + Type: "IT_ETC" + Buy: 100 + Sell: 5 + Weight: 10 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + noauction: true + nomail: true + nogstorage: true + } +}, +{ + Id: 8034 + AegisName: "Tongue" + Name: "Tongue" + Type: "IT_ETC" + Buy: 100 + Sell: 5 + Weight: 100 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + noauction: true + nomail: true + nogstorage: true + } +}, +{ + Id: 8035 + AegisName: "WrappingPaperDotted" + Name: "Dotted Wrapping Paper" + Type: "IT_ETC" + Buy: 100 + Sell: 5 + Weight: 50 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + noauction: true + nomail: true + nogstorage: true + } +}, +{ + Id: 8036 + AegisName: "WrappingPaperStriped" + Name: "Striped Wrapping Paper" + Type: "IT_ETC" + Buy: 100 + Sell: 5 + Weight: 50 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + noauction: true + nomail: true + nogstorage: true + } }, ) diff --git a/db/re/job_db.conf b/db/re/job_db.conf index a513cd99..02b4e16a 100644 --- a/db/re/job_db.conf +++ b/db/re/job_db.conf @@ -61,12 +61,14 @@ Human: { Dagger: 55 Sword: 57 Axe: 50 + TwoHandAxe: 100 Mace: 50 TwoHandMace: 55 Rod: 65 TwoHandRod: 65 Shield: 10 Bow: 80 + Katar: 65 } HPTable:[ 400, 450, 500, 550, 600, 650, 700, 750, 800, 850, // 1 - 10 900, 950, 1000, 1050, 1100, 1150, 1200, 1250, 1300, 1350, // 11 - 20 @@ -112,12 +114,14 @@ DarkUkar: { Dagger: 55 Sword: 57 Axe: 50 + TwoHandAxe: 100 Mace: 50 TwoHandMace: 55 Rod: 65 TwoHandRod: 65 Shield: 10 Bow: 80 + Katar: 65 } HPTable:[ 400, 450, 500, 550, 600, 650, 700, 750, 800, 850, // 1 - 10 900, 950, 1000, 1050, 1100, 1150, 1200, 1250, 1300, 1350, // 11 - 20 @@ -162,12 +166,14 @@ FireKralog: { Dagger: 55 Sword: 57 Axe: 50 + TwoHandAxe: 100 Mace: 50 TwoHandMace: 55 Rod: 65 TwoHandRod: 65 Shield: 10 Bow: 80 + Katar: 65 } HPTable:[ 400, 450, 500, 550, 600, 650, 700, 750, 800, 850, // 1 - 10 900, 950, 1000, 1050, 1100, 1150, 1200, 1250, 1300, 1350, // 11 - 20 @@ -213,12 +219,14 @@ LightRaijin: { Dagger: 55 Sword: 57 Axe: 50 + TwoHandAxe: 100 Mace: 50 TwoHandMace: 55 Rod: 65 TwoHandRod: 65 Shield: 10 Bow: 80 + Katar: 65 } HPTable:[ 400, 450, 500, 550, 600, 650, 700, 750, 800, 850, // 1 - 10 900, 950, 1000, 1050, 1100, 1150, 1200, 1250, 1300, 1350, // 11 - 20 @@ -264,12 +272,14 @@ BlueTritan: { Dagger: 55 Sword: 57 Axe: 50 + TwoHandAxe: 100 Mace: 50 TwoHandMace: 55 Rod: 65 TwoHandRod: 65 Shield: 10 Bow: 80 + Katar: 65 } HPTable:[ 400, 450, 500, 550, 600, 650, 700, 750, 800, 850, // 1 - 10 900, 950, 1000, 1050, 1100, 1150, 1200, 1250, 1300, 1350, // 11 - 20 diff --git a/db/re/mob_db.conf b/db/re/mob_db.conf index 7e5572da..c22d6e90 100644 --- a/db/re/mob_db.conf +++ b/db/re/mob_db.conf @@ -115,12 +115,12 @@ mob_db: ( SpriteName: "Piou" Name: "Piou" Lv: 1 - Hp: 120 + Hp: 110 Sp: 0 - Exp: 1 + Exp: 3 JExp: 0 AttackRange: 1 - Attack: [50, 100] + Attack: [22, 25] Def: 0 Mdef: 0 WalkMask: "WALK_AIR" @@ -146,7 +146,6 @@ mob_db: ( AttackDelay: 1872 AttackMotion: 672 DamageMotion: 480 - MvpExp: 0 Drops: { PiouFeathers: 2300 PiouLegs: 2700 @@ -157,12 +156,12 @@ mob_db: ( SpriteName: "Piousse" Name: "Piousse" Lv: 2 - Hp: 400 + Hp: 220 Sp: 0 - Exp: 2 + Exp: 7 JExp: 0 AttackRange: 1 - Attack: [80, 180] + Attack: [38, 40] Def: 1 Mdef: 0 Stats: { @@ -187,7 +186,6 @@ mob_db: ( AttackDelay: 1872 AttackMotion: 672 DamageMotion: 480 - MvpExp: 0 Drops: { HalfEggshell: 4000 PiouLegs: 3000 @@ -199,13 +197,13 @@ mob_db: ( SpriteName: "Tortuga" Name: "Tortuga" Lv: 3 - Hp: 800 + Hp: 325 Sp: 0 - Exp: 3 + Exp: 6 JExp: 0 AttackRange: 1 - Attack: [70, 90] - Def: 10 + Attack: [44, 45] + Def: 5 Mdef: 0 WalkMask: "WALK_WATER" Stats: { @@ -231,7 +229,6 @@ mob_db: ( AttackDelay: 2872 AttackMotion: 672 DamageMotion: 480 - MvpExp: 0 Drops: { TortugaShellFragment: 1880 LettuceLeaf: 1800 @@ -243,7 +240,7 @@ mob_db: ( Moss: 500 } WeaponAttacks: { - Bows: 5000 + Bows: 7000 } }, { @@ -251,13 +248,13 @@ mob_db: ( SpriteName: "Ratto" Name: "Ratto" Lv: 5 - Hp: 1500 + Hp: 540 Sp: 0 - Exp: 6 + Exp: 10 JExp: 0 AttackRange: 1 - Attack: [100, 200] - Def: 10 + Attack: [49, 50] + Def: 8 Mdef: 0 Stats: { Str: 5 @@ -283,7 +280,6 @@ mob_db: ( AttackDelay: 1872 AttackMotion: 672 DamageMotion: 480 - MvpExp: 0 Drops: { Cheese: 2000 RattoTeeth: 1000 @@ -297,14 +293,14 @@ mob_db: ( SpriteName: "Croc" Name: "Croc" Lv: 8 - Hp: 2000 + Hp: 900 Sp: 0 - Exp: 11 + Exp: 12 JExp: 0 AttackRange: 1 - Attack: [150, 250] - Def: 27 - Mdef: 0 + Attack: [64, 70] + Def: 15 + Mdef: 1 Stats: { Str: 6 Agi: 20 @@ -328,7 +324,6 @@ mob_db: ( AttackDelay: 1872 AttackMotion: 672 DamageMotion: 480 - MvpExp: 0 Drops: { CrocClaw: 2000 BlueCoral: 1300 @@ -342,14 +337,14 @@ mob_db: ( SpriteName: "LittleBlub" Name: "Little Blub" Lv: 4 - Hp: 1200 + Hp: 440 Sp: 0 - Exp: 5 + Exp: 7 JExp: 0 AttackRange: 1 - Attack: [120, 150] - Def: 10 - Mdef: 0 + Attack: [25, 30] + Def: 6 + Mdef: 1 WalkMask: "WALK_WATER" Stats: { Str: 5 @@ -375,7 +370,6 @@ mob_db: ( AttackDelay: 1100 AttackMotion: 672 DamageMotion: 480 - MvpExp: 0 Drops: { SmallTentacles: 1500 PinkBlobime: 1500 @@ -389,15 +383,15 @@ mob_db: ( Id: 1008 SpriteName: "Blub" Name: "Blub" - Lv: 10 - Hp: 3300 + Lv: 8 + Hp: 1300 Sp: 0 - Exp: 19 - JExp: 0 + Exp: 27 + JExp: 2 AttackRange: 1 - Attack: [250, 300] - Def: 15 - Mdef: 0 + Attack: [90, 100] + Def: 14 + Mdef: 3 WalkMask: "WALK_WATER" Stats: { Str: 8 @@ -424,7 +418,6 @@ mob_db: ( AttackDelay: 2150 AttackMotion: 672 DamageMotion: 480 - MvpExp: 0 Drops: { Tentacles: 1800 PinkBlobime: 2000 @@ -438,15 +431,15 @@ mob_db: ( Id: 1009 SpriteName: "ToppyBlub" Name: "Toppy Blub" - Lv: 15 - Hp: 5100 + Lv: 11 + Hp: 1200 Sp: 0 - Exp: 28 + Exp: 16 JExp: 0 AttackRange: 1 - Attack: [300, 400] - Def: 18 - Mdef: 0 + Attack: [150, 180] + Def: 21 + Mdef: 3 WalkMask: "WALK_WATER" Stats: { Str: 20 @@ -472,7 +465,6 @@ mob_db: ( AttackDelay: 2150 AttackMotion: 672 DamageMotion: 480 - MvpExp: 0 Drops: { Tentacles: 2300 PurpleBlobime: 1800 @@ -487,14 +479,14 @@ mob_db: ( SpriteName: "Crocotree" Name: "Crocotree" Lv: 10 - Hp: 4800 + Hp: 1100 Sp: 0 - Exp: 1 + Exp: 15 JExp: 0 AttackRange: 1 Attack: [10, 10] - Def: 35 - Mdef: 0 + Def: 19 + Mdef: 3 Stats: { Str: 2 Agi: 1 @@ -512,7 +504,6 @@ mob_db: ( AttackDelay: 800 AttackMotion: 672 DamageMotion: 480 - MvpExp: 0 Drops: { HalfCroconut: 4200 Croconut: 3300 @@ -548,7 +539,6 @@ mob_db: ( AttackDelay: 800 AttackMotion: 672 DamageMotion: 480 - MvpExp: 0 Drops: { Plushroom: 7000 MushroomSpores: 2000 @@ -560,14 +550,14 @@ mob_db: ( SpriteName: "Frostiana" Name: "Frostiana" Lv: 9 - Hp: 1200 + Hp: 980 Sp: 0 - Exp: 10 + Exp: 15 JExp: 0 AttackRange: 1 - Attack: [200, 400] - Def: 5 - Mdef: 0 + Attack: [95, 100] + Def: 17 + Mdef: 2 Stats: { Str: 10 Agi: 1 @@ -589,7 +579,6 @@ mob_db: ( AttackDelay: 2400 AttackMotion: 672 DamageMotion: 480 - MvpExp: 0 Drops: { MushroomSpores: 4000 Moss: 700 @@ -600,14 +589,14 @@ mob_db: ( SpriteName: "Pikpik" Name: "Pikpik" Lv: 10 - Hp: 100 + Hp: 1120 Sp: 0 - Exp: 3 + Exp: 16 JExp: 0 AttackRange: 0 - Attack: [300, 600] - Def: 15 - Mdef: 0 + Attack: [65, 100] + Def: 19 + Mdef: 3 Stats: { Str: 5 Agi: 1 @@ -629,7 +618,6 @@ mob_db: ( AttackDelay: 1872 AttackMotion: 672 DamageMotion: 480 - MvpExp: 0 Drops: { UrchinMeat: 2000 } @@ -668,7 +656,6 @@ mob_db: ( AttackDelay: 800 AttackMotion: 672 DamageMotion: 480 - MvpExp: 0 Drops: { HalfCroconut: 4200 Croconut: 3300 @@ -679,14 +666,14 @@ mob_db: ( SpriteName: "Tipiu" Name: "Tipiu" Lv: 20 - Hp: 14000 + Hp: 2200 Sp: 0 - Exp: 50 - JExp: 0 + Exp: 42 + JExp: 2 AttackRange: 1 - Attack: [500, 700] - Def: 20 - Mdef: 0 + Attack: [75, 100] + Def: 46 + Mdef: 8 WalkMask: "WALK_AIR" Stats: { Str: 10 @@ -713,7 +700,6 @@ mob_db: ( AttackDelay: 1120 AttackMotion: 1672 DamageMotion: 100 - MvpExp: 0 Drops: { PiouFeathers: 3700 PiouLegs: 4000 @@ -725,14 +711,14 @@ mob_db: ( SpriteName: "Tipiou" Name: "Tipiou" Lv: 45 - Hp: 15000 + Hp: 5000 Sp: 0 - Exp: 30 - JExp: 0 + Exp: 340 + JExp: 9 AttackRange: 1 - Attack: [350, 600] - Def: 15 - Mdef: 0 + Attack: [220, 250] + Def: 128 + Mdef: 22 WalkMask: "WALK_AIR" Stats: { Str: 15 @@ -758,7 +744,6 @@ mob_db: ( AttackDelay: 1120 AttackMotion: 1672 DamageMotion: 100 - MvpExp: 0 Drops: { PiouFeathers: 3300 PiouLegs: 3700 @@ -770,13 +755,13 @@ mob_db: ( SpriteName: "MananaTree" Name: "Manana Tree" Lv: 5 - Hp: 3500 + Hp: 600 Sp: 0 - Exp: 1 + Exp: 9 JExp: 0 AttackRange: 1 Attack: [10, 10] - Def: 25 + Def: 15 Mdef: 1 Stats: { Str: 1 @@ -795,7 +780,6 @@ mob_db: ( AttackDelay: 800 AttackMotion: 672 DamageMotion: 480 - MvpExp: 0 Drops: { Manana: 2500 Manana: 1000 @@ -806,14 +790,14 @@ mob_db: ( SpriteName: "Crafty" Name: "Crafty" Lv: 7 - Hp: 500 + Hp: 760 Sp: 0 - Exp: 9 - JExp: 0 + Exp: 12 + JExp: 1 AttackRange: 1 - Attack: [100, 150] - Def: 7 - Mdef: 40 + Attack: [25, 30] + Def: 12 + Mdef: 1 Stats: { Str: 4 Agi: 30 @@ -838,7 +822,6 @@ mob_db: ( AttackDelay: 800 AttackMotion: 672 DamageMotion: 270 - MvpExp: 0 Drops: { LeftCraftyWing: 4000 RightCraftyWing: 4000 @@ -875,7 +858,6 @@ mob_db: ( AttackDelay: 800 AttackMotion: 672 DamageMotion: 480 - MvpExp: 0 Drops: { PumpkinJuice: 5000 } @@ -885,14 +867,14 @@ mob_db: ( SpriteName: "Cuco" Name: "Cuco" Lv: 25 - Hp: 27000 + Hp: 2700 Sp: 0 - Exp: 100 + Exp: 37 JExp: 0 AttackRange: 1 - Attack: [400, 500] - Def: 45 - Mdef: 40 + Attack: [150, 200] + Def: 60 + Mdef: 10 Stats: { Str: 20 Agi: 1 @@ -917,7 +899,6 @@ mob_db: ( AttackDelay: 1300 AttackMotion: 672 DamageMotion: 270 - MvpExp: 0 Drops: { Pumpkin: 10000 } @@ -927,7 +908,7 @@ mob_db: ( SpriteName: "Dummy" Name: "Dummy" Lv: 1 - Hp: 25 + Hp: 20 Sp: 0 Exp: 1 JExp: 0 @@ -955,20 +936,19 @@ mob_db: ( AttackDelay: 800 AttackMotion: 672 DamageMotion: 480 - MvpExp: 0 }, { Id: 1022 SpriteName: "Fluffy" Name: "Fluffy" - Lv: 6 - Hp: 2800 + Lv: 4 + Hp: 440 Sp: 0 - Exp: 5 + Exp: 6 JExp: 0 AttackRange: 1 - Attack: [200, 250] - Def: 8 + Attack: [70, 90] + Def: 6 Mdef: 0 Stats: { Str: 5 @@ -993,7 +973,6 @@ mob_db: ( AttackDelay: 2872 AttackMotion: 672 DamageMotion: 480 - MvpExp: 0 Drops: { FluffyFur: 3500 LettuceLeaf: 2000 @@ -1005,14 +984,14 @@ mob_db: ( SpriteName: "Mouboo" Name: "Mouboo" Lv: 16 - Hp: 2600 + Hp: 1600 Sp: 0 - Exp: 50 + Exp: 24 JExp: 0 AttackRange: 2 - Attack: [600, 850] - Def: 30 - Mdef: 5 + Attack: [300, 350] + Def: 35 + Mdef: 6 Stats: { Str: 25 Agi: 5 @@ -1036,7 +1015,6 @@ mob_db: ( AttackDelay: 3200 AttackMotion: 1400 DamageMotion: 1200 - MvpExp: 0 Drops: { Pearl: 10 } @@ -1046,14 +1024,14 @@ mob_db: ( SpriteName: "Slime" Name: "Green Slime" Lv: 10 - Hp: 1200 + Hp: 1080 Sp: 0 - Exp: 30 + Exp: 16 JExp: 1 AttackRange: 1 - Attack: [200, 400] - Def: 15 - Mdef: 0 + Attack: [85, 100] + Def: 19 + Mdef: 3 Stats: { Str: 5 Agi: 15 @@ -1078,7 +1056,6 @@ mob_db: ( AttackDelay: 2462 AttackMotion: 864 DamageMotion: 1026 - MvpExp: 0 Drops: { MaggotSlime: 800 HalfEggshell: 200 @@ -1090,14 +1067,14 @@ mob_db: ( SpriteName: "LittleSlime" Name: "Little Green Slime" Lv: 8 - Hp: 500 + Hp: 700 Sp: 0 Exp: 12 JExp: 0 AttackRange: 1 - Attack: [150, 250] - Def: 5 - Mdef: 0 + Attack: [75, 100] + Def: 14 + Mdef: 1 Stats: { Str: 5 Agi: 10 @@ -1122,7 +1099,6 @@ mob_db: ( AttackDelay: 2462 AttackMotion: 864 DamageMotion: 466 - MvpExp: 0 Drops: { MaggotSlime: 550 } @@ -1132,14 +1108,14 @@ mob_db: ( SpriteName: "Maggot" Name: "Maggot" Lv: 10 - Hp: 500 + Hp: 1100 Sp: 0 - Exp: 40 + Exp: 15 JExp: 0 AttackRange: 1 - Attack: [200, 300] - Def: 15 - Mdef: 0 + Attack: [90, 100] + Def: 19 + Mdef: 3 Stats: { Str: 10 Agi: 15 @@ -1163,7 +1139,6 @@ mob_db: ( AttackDelay: 1976 AttackMotion: 672 DamageMotion: 480 - MvpExp: 0 Drops: { MaggotSlime: 500 BugLeg: 600 @@ -1174,14 +1149,14 @@ mob_db: ( SpriteName: "CaveMaggot" Name: "Cave Maggot" Lv: 12 - Hp: 1250 + Hp: 1300 Sp: 0 - Exp: 65 - JExp: 0 + Exp: 20 + JExp: 2 AttackRange: 1 - Attack: [250, 450] - Def: 20 - Mdef: 0 + Attack: [75, 100] + Def: 24 + Mdef: 4 Stats: { Str: 10 Agi: 18 @@ -1207,7 +1182,6 @@ mob_db: ( AttackDelay: 1576 AttackMotion: 672 DamageMotion: 480 - MvpExp: 0 Drops: { MaggotSlime: 500 } @@ -1216,15 +1190,15 @@ mob_db: ( Id: 1028 SpriteName: "ForestMaggot" Name: "Forest Maggot" - Lv: 15 - Hp: 1500 + Lv: 13 + Hp: 1400 Sp: 0 - Exp: 75 + Exp: 20 JExp: 0 AttackRange: 1 - Attack: [300, 500] - Def: 25 - Mdef: 0 + Attack: [125, 150] + Def: 27 + Mdef: 5 Stats: { Str: 20 Agi: 25 @@ -1249,7 +1223,6 @@ mob_db: ( AttackDelay: 1676 AttackMotion: 672 DamageMotion: 480 - MvpExp: 0 Drops: { MaggotSlime: 500 } @@ -1258,19 +1231,19 @@ mob_db: ( Id: 1029 SpriteName: "Bee" Name: "Bee" - Lv: 20 - Hp: 600 + Lv: 5 + Hp: 540 Sp: 0 - Exp: 25 + Exp: 11 JExp: 0 AttackRange: 1 - Attack: [250, 450] - Def: 30 + Attack: [85, 100] + Def: 8 Mdef: 0 WalkMask: "WALK_AIR" Stats: { Str: 20 - Agi: 20 + Agi: 65 Vit: 15 Int: 3 Dex: 40 @@ -1293,7 +1266,6 @@ mob_db: ( AttackDelay: 1600 AttackMotion: 1000 DamageMotion: 800 - MvpExp: 0 Drops: { } }, @@ -1302,14 +1274,14 @@ mob_db: ( SpriteName: "Pinkie" Name: "Pinkie" Lv: 12 - Hp: 900 + Hp: 1300 Sp: 0 - Exp: 40 + Exp: 19 JExp: 1 AttackRange: 1 - Attack: [350, 500] - Def: 35 - Mdef: 0 + Attack: [235, 250] + Def: 32 + Mdef: 5 Stats: { Str: 5 Agi: 10 @@ -1334,7 +1306,6 @@ mob_db: ( AttackDelay: 2500 AttackMotion: 600 DamageMotion: 200 - MvpExp: 0 Drops: { PinkAntennae: 5000 } @@ -1344,14 +1315,14 @@ mob_db: ( SpriteName: "LogHead" Name: "Log Head" Lv: 15 - Hp: 1200 + Hp: 1625 Sp: 0 - Exp: 40 + Exp: 21 JExp: 0 AttackRange: 1 - Attack: [200, 300] - Def: 40 - Mdef: 0 + Attack: [235, 250] + Def: 32 + Mdef: 5 Stats: { Str: 30 Agi: 5 @@ -1376,7 +1347,6 @@ mob_db: ( AttackDelay: 2500 AttackMotion: 800 DamageMotion: 600 - MvpExp: 0 Drops: { RawLog: 5000 } @@ -1385,19 +1355,19 @@ mob_db: ( Id: 1032 SpriteName: "Butterfly" Name: "Butterfly" - Lv: 22 - Hp: 700 + Lv: 11 + Hp: 1200 Sp: 0 - Exp: 30 + Exp: 18 JExp: 0 AttackRange: 1 - Attack: [200, 350] - Def: 35 - Mdef: 0 + Attack: [75, 100] + Def: 24 + Mdef: 4 WalkMask: "WALK_AIR" Stats: { Str: 5 - Agi: 30 + Agi: 60 Vit: 15 Int: 3 Dex: 25 @@ -1418,7 +1388,6 @@ mob_db: ( AttackDelay: 1600 AttackMotion: 700 DamageMotion: 850 - MvpExp: 0 Drops: { BugLeg: 5000 AlizarinHerb: 1000 @@ -1469,13 +1438,13 @@ mob_db: ( SpriteName: "PinkFlower" Name: "Pink Flower" Lv: 15 - Hp: 500 + Hp: 1500 Sp: 0 - Exp: 45 + Exp: 23 JExp: 0 AttackRange: 2 - Attack: [200, 500] - Def: 10 + Attack: [15, 20] + Def: 20 Mdef: 10 Stats: { Str: 5 @@ -1507,14 +1476,14 @@ mob_db: ( SpriteName: "ManaBug" Name: "Mana Bug" Lv: 15 - Hp: 450 + Hp: 1580 Sp: 0 - Exp: 15 - JExp: 0 + Exp: 28 + JExp: 2 AttackRange: 1 - Attack: [320, 480] - Def: 15 - Mdef: 0 + Attack: [90, 100] + Def: 32 + Mdef: 5 WalkMask: "WALK_AIR" Stats: { Str: 5 @@ -1540,7 +1509,6 @@ mob_db: ( AttackDelay: 1800 AttackMotion: 500 DamageMotion: 700 - MvpExp: 0 Drops: { BugLeg: 10000 } @@ -1737,9 +1705,8 @@ mob_db: ( AttackDelay: 2500 AttackMotion: 1200 DamageMotion: 600 - MvpExp: 0 Drops: { - SilkCocoon: 4000 + SilkCocoon: 3500 SilkCocoon: 500 } }, @@ -1747,15 +1714,15 @@ mob_db: ( Id: 1041 SpriteName: "Squirrel" Name: "Squirrel" - Lv: 20 - Hp: 1300 + Lv: 11 + Hp: 1180 Sp: 0 - Exp: 30 + Exp: 16 JExp: 0 AttackRange: 1 - Attack: [100, 200] - Def: 10 - Mdef: 0 + Attack: [55, 75] + Def: 21 + Mdef: 3 Stats: { Str: 15 Agi: 25 @@ -1779,7 +1746,6 @@ mob_db: ( AttackDelay: 895 AttackMotion: 750 DamageMotion: 600 - MvpExp: 0 Drops: { Acorn: 2500 CobaltHerb: 1000 @@ -1791,14 +1757,14 @@ mob_db: ( SpriteName: "GrassSnake" Name: "Grass Snake" Lv: 20 - Hp: 2000 + Hp: 2200 Sp: 0 - Exp: 85 - JExp: 3 + Exp: 30 + JExp: 4 AttackRange: 1 - Attack: [400, 550] - Def: 25 - Mdef: 0 + Attack: [75, 100] + Def: 46 + Mdef: 8 Stats: { Str: 20 Agi: 30 @@ -1822,7 +1788,6 @@ mob_db: ( AttackDelay: 800 AttackMotion: 400 DamageMotion: 380 - MvpExp: 0 Drops: { } }, @@ -1830,15 +1795,15 @@ mob_db: ( Id: 1043 SpriteName: "Scorpion" Name: "Scorpion" - Lv: 18 - Hp: 3000 + Lv: 14 + Hp: 1500 Sp: 0 - Exp: 70 + Exp: 21 JExp: 2 AttackRange: 1 - Attack: [600, 700] - Def: 30 - Mdef: 5 + Attack: [110, 150] + Def: 35 + Mdef: 6 Stats: { Str: 25 Agi: 15 @@ -1862,7 +1827,6 @@ mob_db: ( AttackDelay: 1250 AttackMotion: 800 DamageMotion: 500 - MvpExp: 0 Drops: { } }, @@ -1871,14 +1835,14 @@ mob_db: ( SpriteName: "Spider" Name: "Spider" Lv: 22 - Hp: 1800 + Hp: 2350 Sp: 0 - Exp: 11 - JExp: 1 + Exp: 29 + JExp: 4 AttackRange: 1 - Attack: [350, 650] - Def: 25 - Mdef: 0 + Attack: [140, 150] + Def: 52 + Mdef: 9 Stats: { Str: 18 Agi: 32 @@ -1902,7 +1866,6 @@ mob_db: ( AttackDelay: 1400 AttackMotion: 500 DamageMotion: 300 - MvpExp: 0 Drops: { } }, @@ -1945,6 +1908,12 @@ mob_db: ( } WeaponAttacks: { All: 0 + Daggers: 2500 + 1HSwords: 3300 + 1HAxes: 5000 + 2HSwords: 5000 + 2HAxes: 6600 + 2HMaces: 7500 Katars: 10000 } }, @@ -1986,6 +1955,12 @@ mob_db: ( } WeaponAttacks: { All: 0 + Daggers: 2500 + 1HSwords: 3300 + 1HAxes: 5000 + 2HSwords: 5000 + 2HAxes: 6600 + 2HMaces: 7500 Katars: 10000 } }, @@ -2027,6 +2002,12 @@ mob_db: ( } WeaponAttacks: { All: 0 + Daggers: 2500 + 1HSwords: 3300 + 1HAxes: 5000 + 2HSwords: 5000 + 2HAxes: 6600 + 2HMaces: 7500 Katars: 10000 } }, @@ -2068,6 +2049,12 @@ mob_db: ( } WeaponAttacks: { All: 0 + Daggers: 2500 + 1HSwords: 3300 + 1HAxes: 5000 + 2HSwords: 5000 + 2HAxes: 6600 + 2HMaces: 7500 Katars: 10000 } }, @@ -2076,14 +2063,14 @@ mob_db: ( SpriteName: "SpikyMushroom" Name: "Spiky Mushroom" Lv: 19 - Hp: 2200 + Hp: 2050 Sp: 0 - Exp: 11 + Exp: 32 JExp: 0 AttackRange: 1 - Attack: [350, 450] - Def: 25 - Mdef: 0 + Attack: [45, 50] + Def: 43 + Mdef: 7 Stats: { Str: 10 Agi: 5 @@ -2108,9 +2095,9 @@ mob_db: ( AttackDelay: 600 AttackMotion: 700 DamageMotion: 600 - MvpExp: 0 Drops: { HardSpike: 1000 + SmallMushroom: 800 } }, { @@ -2118,14 +2105,14 @@ mob_db: ( SpriteName: "WickedMushroom" Name: "Wicked Mushroom" Lv: 26 - Hp: 2700 + Hp: 2800 Sp: 0 - Exp: 11 - JExp: 0 + Exp: 37 + JExp: 3 AttackRange: 1 - Attack: [450, 550] - Def: 30 - Mdef: 15 + Attack: [60, 100] + Def: 64 + Mdef: 11 Stats: { Str: 10 Agi: 5 @@ -2149,7 +2136,6 @@ mob_db: ( AttackDelay: 600 AttackMotion: 700 DamageMotion: 600 - MvpExp: 0 Drops: { HardSpike: 2000 } @@ -2193,6 +2179,12 @@ mob_db: ( } WeaponAttacks: { All: 0 + Daggers: 2500 + 1HSwords: 3300 + 1HAxes: 5000 + 2HSwords: 5000 + 2HAxes: 6600 + 2HMaces: 7500 Katars: 10000 } }, @@ -2235,6 +2227,12 @@ mob_db: ( } WeaponAttacks: { All: 0 + Daggers: 2500 + 1HSwords: 3300 + 1HAxes: 5000 + 2HSwords: 5000 + 2HAxes: 6600 + 2HMaces: 7500 Katars: 10000 } }, @@ -2277,6 +2275,12 @@ mob_db: ( } WeaponAttacks: { All: 0 + Daggers: 2500 + 1HSwords: 3300 + 1HAxes: 5000 + 2HSwords: 5000 + 2HAxes: 6600 + 2HMaces: 7500 Katars: 10000 } }, @@ -2319,6 +2323,12 @@ mob_db: ( } WeaponAttacks: { All: 0 + Daggers: 2500 + 1HSwords: 3300 + 1HAxes: 5000 + 2HSwords: 5000 + 2HAxes: 6600 + 2HMaces: 7500 Katars: 10000 } }, @@ -2361,6 +2371,12 @@ mob_db: ( } WeaponAttacks: { All: 0 + Daggers: 2500 + 1HSwords: 3300 + 1HAxes: 5000 + 2HSwords: 5000 + 2HAxes: 6600 + 2HMaces: 7500 Katars: 10000 } }, @@ -2405,19 +2421,19 @@ mob_db: ( Id: 1058 SpriteName: "BadBee" Name: "Bad Bee" - Lv: 25 - Hp: 850 + Lv: 15 + Hp: 1600 Sp: 0 - Exp: 40 + Exp: 33 JExp: 0 AttackRange: 1 - Attack: [350, 500] - Def: 25 - Mdef: 0 + Attack: [100, 120] + Def: 32 + Mdef: 5 WalkMask: "WALK_AIR" Stats: { Str: 25 - Agi: 25 + Agi: 55 Vit: 15 Int: 1 Dex: 35 @@ -2440,7 +2456,6 @@ mob_db: ( AttackDelay: 1200 AttackMotion: 750 DamageMotion: 750 - MvpExp: 0 Drops: { } }, @@ -2600,14 +2615,14 @@ mob_db: ( SpriteName: "Bandit" Name: "Bandit" Lv: 26 - Hp: 4211 + Hp: 2800 Sp: 0 - Exp: 44 - JExp: 8 + Exp: 48 + JExp: 6 AttackRange: 1 - Attack: [168, 180] - Def: 45 - Mdef: 20 + Attack: [120, 150] + Def: 64 + Mdef: 10 Stats: { Str: 11 Agi: 20 @@ -2645,13 +2660,13 @@ mob_db: ( SpriteName: "RobinBandit" Name: "Robin Bandit" Lv: 35 - Hp: 3788 + Hp: 3400 Sp: 0 - Exp: 129 + Exp: 140 JExp: 12 AttackRange: 5 Attack: [149, 152] - Def: 28 + Def: 90 Mdef: 22 Stats: { Str: 15 @@ -2692,14 +2707,14 @@ mob_db: ( SpriteName: "BanditLord" Name: "Bandit Lord" Lv: 55 - Hp: 12900 + Hp: 12000 Sp: 0 - Exp: 250 + Exp: 500 JExp: 60 AttackRange: 5 - Attack: [710, 880] - Def: 25 - Mdef: 20 + Attack: [572, 600] + Def: 150 + Mdef: 44 Stats: { Str: 28 Agi: 40 @@ -2738,14 +2753,14 @@ mob_db: ( SpriteName: "LegionSwordswoman" Name: "Legion Swordswoman" Lv: 20 - Hp: 2845 + Hp: 2220 Sp: 0 - Exp: 22 + Exp: 27 JExp: 3 AttackRange: 1 - Attack: [125, 150] - Def: 35 - Mdef: 5 + Attack: [75, 100] + Def: 46 + Mdef: 7 Stats: { Str: 15 Agi: 10 @@ -2774,14 +2789,14 @@ mob_db: ( SpriteName: "LegionHalberdier" Name: "Legion Halberdier" Lv: 22 - Hp: 3618 + Hp: 2200 Sp: 0 - Exp: 27 + Exp: 30 JExp: 4 AttackRange: 2 - Attack: [215, 240] - Def: 40 - Mdef: 0 + Attack: [200, 240] + Def: 50 + Mdef: 9 Stats: { Str: 10 Agi: 5 @@ -2810,14 +2825,14 @@ mob_db: ( SpriteName: "LegionLieutenant" Name: "Legion Lieutenant" Lv: 30 - Hp: 5412 + Hp: 2900 Sp: 0 - Exp: 54 + Exp: 75 JExp: 8 AttackRange: 2 - Attack: [312, 325] - Def: 50 - Mdef: 0 + Attack: [125, 150] + Def: 60 + Mdef: 14 Stats: { Str: 20 Agi: 30 @@ -2842,18 +2857,218 @@ mob_db: ( DamageMotion: 420 }, { + Id: 1069 + SpriteName: "GemVeinbloc" + Name: "Gem Veinbloc" + Lv: 1 + Hp: 20 + Sp: 0 + Exp: 1 + JExp: 0 + AttackRange: 0 + Attack: [0, 0] + Def: 1 + Mdef: 1 + Stats: { + Str: 1 + Agi: 1 + Vit: 1 + Int: 1 + Dex: 1 + Luk: 1 + } + ViewRange: 1 + ChaseRange: 1 + Size: 1 + Race: 3 + Element: (2, 1) + Mode: { + Plant: true + } + MoveSpeed: 1 + AttackDelay: 1 + AttackMotion: 1 + DamageMotion: 1 + Drops: { + CrudeDiamond: 45 + CrudeAmethyst: 23 + CrudeSapphire: 15 + CrudeRuby: 98 + CrudeTopaz: 68 + CrudeEmerald: 40 + Coal: 1500 + IronOre: 500 + GoldNuggets: 100 + } + WeaponAttacks: { + All: 0 + Daggers: 2500 + 1HSwords: 3300 + 1HAxes: 5000 + 2HSwords: 5000 + 2HAxes: 6600 + 2HMaces: 7500 + Katars: 10000 + } +}, +{ + Id: 1070 + SpriteName: "GoldVeinbloc" + Name: "Gold Veinbloc" + Lv: 1 + Hp: 15 + Sp: 0 + Exp: 1 + JExp: 0 + AttackRange: 0 + Attack: [0, 0] + Def: 1 + Mdef: 1 + Stats: { + Str: 1 + Agi: 1 + Vit: 1 + Int: 1 + Dex: 1 + Luk: 1 + } + ViewRange: 1 + ChaseRange: 1 + Size: 1 + Race: 3 + Element: (2, 1) + Mode: { + Plant: true + } + MoveSpeed: 1 + AttackDelay: 1 + AttackMotion: 1 + DamageMotion: 1 + Drops: { + GoldNuggets: 500 + Coal: 2500 + IronOre: 1250 + DiamondShard: 150 + AmethystShard: 75 + SapphireShard: 50 + } + WeaponAttacks: { + All: 0 + Daggers: 2500 + 1HSwords: 3300 + 1HAxes: 5000 + 2HSwords: 5000 + 2HAxes: 6600 + 2HMaces: 7500 + Katars: 10000 + } +}, +{ + Id: 1071 + SpriteName: "CoalVeinbloc" + Name: "Coal Veinbloc" + Lv: 1 + Hp: 7 + Sp: 0 + Exp: 1 + JExp: 0 + AttackRange: 0 + Attack: [0, 0] + Def: 1 + Mdef: 1 + Stats: { + Str: 1 + Agi: 1 + Vit: 1 + Int: 1 + Dex: 1 + Luk: 1 + } + ViewRange: 1 + ChaseRange: 1 + Size: 1 + Race: 3 + Element: (2, 1) + Mode: { + Plant: true + } + MoveSpeed: 1 + AttackDelay: 1 + AttackMotion: 1 + DamageMotion: 1 + Drops: { + Coal: 3500 + IronOre: 1000 + RubyShard: 350 + TopazShard: 250 + EmeraldShard: 200 + } + WeaponAttacks: { + All: 0 + Daggers: 2500 + 1HSwords: 3300 + 1HAxes: 5000 + 2HSwords: 5000 + 2HAxes: 6600 + 2HMaces: 7500 + Katars: 10000 + } +}, +{ + Id: 1072 + SpriteName: "Moubi" + Name: "Moubi" + Lv: 26 + Hp: 3600 + Sp: 0 + Exp: 69 + JExp: 0 + AttackRange: 2 + Attack: [690, 960] + Def: 96 + Mdef: 69 + Stats: { + Str: 29 + Agi: 9 + Vit: 9 + Int: 6 + Dex: 9 + Luk: 69 + } + ViewRange: 6 + ChaseRange: 9 + Size: 0 + Race: 2 + Element: (1, 1) + Mode: { + CanMove: true + CanAttack: true + CastSensorChase: true + ChangeChase: true + } + MoveSpeed: 300 + AttackDelay: 3200 + AttackMotion: 1400 + DamageMotion: 1200 + Drops: { + Pearl: 10 + MagicFeather: 10 + CopperNecklace: 1 + } +}, +{ Id: 1100 SpriteName: "PoisonSkull" Name: "Poison Skull" Lv: 50 - Hp: 7500 + Hp: 5100 Sp: 0 - Exp: 250 + Exp: 420 JExp: 45 AttackRange: 2 - Attack: [750, 1000] - Def: 35 - Mdef: 0 + Attack: [250, 300] + Def: 135 + Mdef: 25 Stats: { Str: 30 Agi: 40 @@ -2878,7 +3093,6 @@ mob_db: ( AttackDelay: 1025 AttackMotion: 452 DamageMotion: 652 - MvpExp: 0 Drops: { } }, @@ -2887,14 +3101,14 @@ mob_db: ( SpriteName: "ManaGhost" Name: "Mana Ghost" Lv: 40 - Hp: 5500 + Hp: 3900 Sp: 0 Exp: 180 JExp: 25 AttackRange: 2 - Attack: [500, 750] - Def: 45 - Mdef: 0 + Attack: [120, 150] + Def: 90 + Mdef: 25 Stats: { Str: 20 Agi: 50 @@ -2918,7 +3132,6 @@ mob_db: ( AttackDelay: 625 AttackMotion: 550 DamageMotion: 450 - MvpExp: 0 Drops: { } }, @@ -2927,14 +3140,14 @@ mob_db: ( SpriteName: "GameBalance" Name: "Game Balance" Lv: 40 - Hp: 12000 + Hp: 11000 Sp: 0 - Exp: 180 - JExp: 25 + Exp: 380 + JExp: 35 AttackRange: 2 - Attack: [250, 750] - Def: 45 - Mdef: 80 + Attack: [260, 300] + Def: 75 + Mdef: 60 Stats: { Str: 20 Agi: 50 @@ -2961,7 +3174,6 @@ mob_db: ( AttackDelay: 1625 AttackMotion: 550 DamageMotion: 450 - MvpExp: 0 Drops: { } }, @@ -2970,14 +3182,14 @@ mob_db: ( SpriteName: "AngryCrafty" Name: "AngryCrafty" Lv: 7 - Hp: 500 + Hp: 750 Sp: 0 - Exp: 9 + Exp: 13 JExp: 0 AttackRange: 1 - Attack: [100, 150] - Def: 7 - Mdef: 40 + Attack: [25, 50] + Def: 12 + Mdef: 4 Stats: { Str: 4 Agi: 30 @@ -3004,7 +3216,6 @@ mob_db: ( AttackDelay: 800 AttackMotion: 672 DamageMotion: 270 - MvpExp: 0 Drops: { LeftCraftyWing: 4000 RightCraftyWing: 4000 @@ -3016,14 +3227,14 @@ mob_db: ( SpriteName: "BlackScorpion" Name: "Black Scorpion" Lv: 18 - Hp: 3000 + Hp: 2000 Sp: 0 - Exp: 70 + Exp: 26 JExp: 2 AttackRange: 1 - Attack: [600, 700] - Def: 30 - Mdef: 5 + Attack: [120, 150] + Def: 35 + Mdef: 7 Stats: { Str: 25 Agi: 15 @@ -3047,8 +3258,8 @@ mob_db: ( AttackDelay: 1250 AttackMotion: 800 DamageMotion: 500 - MvpExp: 0 Drops: { + BlackScorpionStinger:750 } }, { @@ -3056,14 +3267,14 @@ mob_db: ( SpriteName: "ThiefSlime" Name: "Thief Slime" Lv: 10 - Hp: 1200 + Hp: 1050 Sp: 0 - Exp: 30 + Exp: 15 JExp: 0 AttackRange: 1 - Attack: [200, 400] - Def: 15 - Mdef: 0 + Attack: [90, 100] + Def: 19 + Mdef: 3 Stats: { Str: 5 Agi: 15 @@ -3082,11 +3293,10 @@ mob_db: ( CanAttack: false Looter: true } - MoveSpeed: 300 + MoveSpeed: 320 AttackDelay: 2462 AttackMotion: 864 DamageMotion: 1026 - MvpExp: 0 Drops: { MaggotSlime: 800 HalfEggshell: 200 @@ -3098,14 +3308,14 @@ mob_db: ( SpriteName: "SpiderQueen" Name: "Spider Queen" Lv: 45 - Hp: 18000 + Hp: 16000 Sp: 0 Exp: 1250 JExp: 125 AttackRange: 3 - Attack: [450, 750] - Def: 50 - Mdef: 120 + Attack: [300, 350] + Def: 120 + Mdef: 80 Stats: { Str: 40 Agi: 30 @@ -3132,21 +3342,20 @@ mob_db: ( AttackDelay: 1200 AttackMotion: 550 DamageMotion: 450 - MvpExp: 0 Drops: { } }, { Id: 1107 - SpriteName: "Dummy2" - Name: "Dummy" + SpriteName: "FireDummy" + Name: "Burning Dummy" Lv: 1 - Hp: 25 - Sp: 0 + Hp: 20 + Sp: 1000 Exp: 1 JExp: 0 AttackRange: 1 - Attack: [1, 1] + Attack: [100, 100] Def: 100 Mdef: 1 Stats: { @@ -3164,78 +3373,97 @@ mob_db: ( Element: (2, 1) Mode: { Plant: true + Aggressive: true + CanAttack: true } MoveSpeed: 1000 AttackDelay: 800 AttackMotion: 672 DamageMotion: 480 - MvpExp: 0 - SkillAttacks: { - SM_BASH: 0 + Drops: { } - WeaponAttacks: { - NoWeapon: 0 - Daggers: 0 - 1HSwords: 0 - 2HSwords: 0 - 1HSpears: 0 - 2HSpears: 0 - 1HAxes: 0 - 2HAxes: 0 - Maces: 0 - 2HMaces: 0 - Staves: 0 - Bows: 10000 - Knuckles: 0 - Instruments: 0 - Whips: 0 - Katars: 0 - Revolvers: 0 - Rifles: 0 - GatlingGuns: 0 - Shotguns: 0 - GrenadeLaunchers: 0 - FuumaShurikens: 0 - } -}, -{ - Id: 1108 - SpriteName: "FireDummy" - Name: "Burning Dummy" - Lv: 1 - Hp: 25 - Sp: 1000 - Exp: 1 +}, +{ + Id: 1109 + SpriteName: "Swampling" + Name: "Swampling" + Lv: 16 + Hp: 1600 + Sp: 0 + Exp: 24 JExp: 0 - AttackRange: 1 - Attack: [100, 100] - Def: 1 - Mdef: 1 + AttackRange: 2 + Attack: [300, 350] + Def: 35 + Mdef: 6 Stats: { - Str: 1 - Agi: 100 - Vit: 1 - Int: 100 - Dex: 100 - Luk: 100 + Str: 25 + Agi: 5 + Vit: 30 + Int: 1 + Dex: 5 + Luk: 35 } ViewRange: 1 + ChaseRange: 20 + Size: 0 + Race: 2 + Element: (1, 1) + Mode: { + CanMove: true + CanAttack: true + CastSensorChase: true + ChangeChase: true + } + MoveSpeed: 300 + AttackDelay: 3200 + AttackMotion: 1400 + DamageMotion: 1200 + Drops: { + Pearl: 10 + } +}, +{ + Id: 1110 + SpriteName: "GoldenScorpion" + Name: "Golden Scorpion" + Lv: 40 + Hp: 18000 + Sp: 0 + Exp: 1600 + JExp: 200 + AttackRange: 2 + Attack: [470, 520] + Def: 90 + Mdef: 50 + Stats: { + Str: 30 + Agi: 30 + Vit: 50 + Int: 5 + Dex: 40 + Luk: 20 + } + ViewRange: 7 ChaseRange: 12 - Size: 1 - Race: 3 - Element: (2, 1) + Size: 0 + Race: 2 + Element: (1, 1) Mode: { - CanMove: false - Aggressive: true + CanMove: true CanAttack: true - NoKnockback: true + ChangeChase: true + ChangeTargetMelee: true + CastSensorChase: true + Boss: true } - MoveSpeed: 1000 - AttackDelay: 800 + MoveSpeed: 300 + AttackDelay: 872 AttackMotion: 672 DamageMotion: 480 - MvpExp: 0 Drops: { + BugLeg: 4000 + GoldenScorpionStinger:1500 } }, { @@ -3243,14 +3471,14 @@ mob_db: ( SpriteName: "Tengu" Name: "Tengu" Lv: 80 - Hp: 7500 + Hp: 12500 Sp: 0 - Exp: 100 - JExp: 15 + Exp: 5000 + JExp: 100 AttackRange: 2 - Attack: [250, 750] - Def: 45 - Mdef: 10 + Attack: [470, 500] + Def: 260 + Mdef: 80 Stats: { Str: 70 Agi: 20 @@ -3277,7 +3505,48 @@ mob_db: ( AttackDelay: 1200 AttackMotion: 450 DamageMotion: 850 - MvpExp: 0 + Drops: { + } +}, +{ + Id: 1121 + SpriteName: "Golem" + Name: "Golem" + Lv: 80 + Hp: 12500 + Sp: 0 + Exp: 5000 + JExp: 100 + AttackRange: 2 + Attack: [470, 500] + Def: 320 + Mdef: 40 + Stats: { + Str: 70 + Agi: 20 + Vit: 40 + Int: 10 + Dex: 80 + Luk: 20 + } + ViewRange: 6 + ChaseRange: 12 + Size: 1 + Race: 2 + Element: (5, 1) + Mode: { + CanMove: true + CanAttack: true + CastSensorChase: true + ChangeChase: true + Boss: false + Angry: true + Aggressive: true + } + MoveSpeed: 320 + AttackDelay: 4000 + AttackMotion: 2000 + DamageMotion: 2000 Drops: { } }, diff --git a/db/re/mob_skill_db.conf b/db/re/mob_skill_db.conf index f71b7c63..7e4c18e8 100644 --- a/db/re/mob_skill_db.conf +++ b/db/re/mob_skill_db.conf @@ -35,24 +35,141 @@ mob_skill_db:( <Monster_Constant>: { <Skill_Constant>: { ClearSkills: (boolean, defaults to false) allows cleaning all previous defined skills for the mob. - SkillLevel: (int, defaults to 1) - SkillState: (int, defaults to 0) + SkillLevel: (int, defaults to 1) + SkillState: (int, defaults to 0) SkillTarget: (int, defaults to 0) - Rate: (int, defaults to 1) - CastTime: (int, defaults to 0) - Delay: (int, defaults to 0) - Cancelable: (boolean, defaults to false) + Rate: (int, defaults to 1) Rate refers to the chance of the skill being casted when the condition is fulfilled.(10000 = 100%) + CastTime: (int, defaults to 0) CastTime is the time in milliseconds that has to be pass to casting skill + Delay: (int, defaults to 0) Delay is the time in milliseconds that has to be pass before recasting the same skill. + Cancelable: (boolean, defaults to false) CastCondition: (int, defaults to 0) ConditionData: (int, defaults to 0) - val0: (int, defaults to 0) - val1: (int, defaults to 0) - val2: (int, defaults to 0) - val3: (int, defaults to 0) - val4: (int, defaults to 0) - Emotion: (int, defaults to 0) - ChatMsgID: (int, defaults to 0) + val0: (int, defaults to 0) Value 0 + val1: (int, defaults to 0) + val2: (int, defaults to 0) + val3: (int, defaults to 0) + val4: (int, defaults to 0) + Emotion: (int, defaults to 0) + ChatMsgID: (int, defaults to 0) } } + +// STATE: +// any (except dead) / idle (in standby) / walk (in movement) / dead (on killed) / +// loot /attack / angry (like attack, except player has not attacked mob yet) / +// chase (following target, after being attacked) / follow (following target, +// without being attacked) / anytarget (attack+angry+chase+follow) +SKILL_STATES = { + "any": "MSS_ANY", + "idle": "MSS_IDLE", + "walk": "MSS_WALK", + "loot": "MSS_LOOT", + "dead": "MSS_DEAD", + "attack": "MSS_BERSERK", + "angry": "MSS_ANGRY", + "chase": "MSS_RUSH", + "follow": "MSS_FOLLOW", + "anytarget": "MSS_ANYTARGET" +} + + +// TARGET: +// target (current target) / self / friend / master / randomtarget (any enemy within skill's range) +// +// The following are for ground-skills, a random target tile is selected from the specified area: +// around1 (3x3 area around self) / around2 (5x5 area around self) / +// around3 (7x7 area around self) / around4 (9x9 area around self) / +// around5 (3x3 area around target) / around6 (5x5 area around target) / +// around7 (7x7 area around target) / around8 (9x9 area around target) / +// around = around4 +SKILL_TARGET = { + "target": "MST_TARGET", + "randomtarget": "MST_RANDOM", + "self": "MST_SELF", + "friend": "MST_FRIEND", + "master": "MST_MASTER", + "around5": "MST_AROUND5", + "around6": "MST_AROUND6", + "around7": "MST_AROUND7", + "around8": "MST_AROUND8", + "around1": "MST_AROUND1", + "around2": "MST_AROUND2", + "around3": "MST_AROUND3", + "around4": "MST_AROUND4", + "around": "MST_AROUND" +} + +// CONDITION: +// always Unconditional (no condition value). +// onspawn When mob spawns/respawns (no condition value). +// myhpltmaxrate When mob's HP drops to the specified %. +// myhpinrate When mob's HP is in a certain % range (condition value = lower bound, val1 = upper bound). +// mystatuson If mob has the specified abnormality in status. +// mystatusoff If mob has ended the specified abnormality in status. +// friendhpltmaxrate When mob's friend's HP drops to the specified %. +// friendhpinrate When mob's friend's HP is in a certain % range (condition value = lower bound, val1 = upper bound). +// friendstatuson If friend has the specified abnormality in status. +// friendstatusoff If friend has ended the specified abnormality in status. +// attackpcgt When attack PCs become greater than specified number. +// attackpcge When attack PCs become greater than or equal to the specified number. +// slavelt When number of slaves is less than the original specified number. +// slavele When number of slaves is less than or equal to the original specified number. +// closedattacked When close range melee attacked (no condition value). +// longrangeattacked When long range attacked, ex. bows, guns, ranged skills (no condition value). +// skillused When the specified skill is used on the mob. +// afterskill After mob casts the specified skill. +// casttargeted When a target is in cast range (no condition value). +// rudeattacked When mob is rude attacked (no condition value). +SKILL_COND1 = { + "always": "MSC_ALWAYS", + "myhpltmaxrate": "MSC_MYHPLTMAXRATE", + "myhpinrate": "MSC_MYHPINRATE", + "friendhpltmaxrate": "MSC_FRIENDHPLTMAXRATE", + "friendhpinrate": "MSC_FRIENDHPINRATE", + "mystatuson": "MSC_MYSTATUSON", + "mystatusoff": "MSC_MYSTATUSOFF", + "friendstatuson": "MSC_FRIENDSTATUSON", + "friendstatusoff": "MSC_FRIENDSTATUSOFF", + "attackpcgt": "MSC_ATTACKPCGT", + "attackpcge": "MSC_ATTACKPCGE", + "slavelt": "MSC_SLAVELT", + "slavele": "MSC_SLAVELE", + "closedattacked": "MSC_CLOSEDATTACKED", + "longrangeattacked": "MSC_LONGRANGEATTACKED", + "skillused": "MSC_SKILLUSED", + "afterskill": "MSC_AFTERSKILL", + "casttargeted": "MSC_CASTTARGETED", + "rudeattacked": "MSC_RUDEATTACKED", + "masterhpltmaxrate": "MSC_MASTERHPLTMAXRATE", + "masterattacked": "MSC_MASTERATTACKED", + "alchemist": "MSC_ALCHEMIST", + "onspawn": "MSC_SPAWN" +} + +// Status abnormalities specified through the statuson/statusoff system: +// anybad (any type of state change) / stone / freeze / stun / sleep / +// poison / curse / silence / confusion / blind / hiding / sight (unhidden) +// +// Note: if a negative MobID is provided, the skill will be treated as 'global': +// -1: added for all boss types. +// -2: added for all normal types. +// -4: added for all mobs. + +SKILL_COND2 = { + "anybad": "MSC_ANY", + "stone": "SC_STONE", + "freeze": "SC_FREEZE", + "stun": "SC_STUN", + "sleep": "SC_SLEEP", + "poison": "SC_POISON", + "curse": "SC_CURSE", + "silence": "SC_SILENCE", + "confusion": "SC_CONFUSION", + "blind": "SC_BLIND", + "hiding": "SC_HIDING", + "sight": "SC_SIGHT" +} + **************************************************************************/ Ratto: { NPC_POISON: { @@ -230,8 +347,8 @@ mob_skill_db:( /**********************************************************************/ Beehive: { - NPC_SUMMONSLAVE: { - SkillState: "MSS_ANY" + NPC_SUMMONMONSTER: { + SkillState: "MSS_ANYTARGET" SkillLevel: 1 Rate: 10000 CastTime: 100 @@ -242,8 +359,8 @@ mob_skill_db:( ConditionData: 90 val0: 1058 } - NPC_SUMMONSLAVE: { - SkillState: "MSS_ANY" + NPC_SUMMONMONSTER: { + SkillState: "MSS_ANYTARGET" SkillLevel: 2 Rate: 10000 CastTime: 100 @@ -254,8 +371,8 @@ mob_skill_db:( ConditionData: 50 val0: 1058 } - NPC_SUMMONSLAVE: { - SkillState: "MSS_ANY" + NPC_SUMMONMONSTER: { + SkillState: "MSS_ANYTARGET" SkillLevel: 3 Rate: 10000 CastTime: 100 @@ -388,7 +505,7 @@ mob_skill_db:( PinkFlower: { NPC_SUMMONSLAVE: { SkillState: "MSS_ANY" - SkillLevel: 2 + SkillLevel: 1 Rate: 10000 CastTime: 1000 Delay: 20000 @@ -400,7 +517,7 @@ mob_skill_db:( } /**********************************************************************/ YellowTulip: { - NPC_SUMMONMONSTER: { + NPC_SUMMONSLAVE: { SkillState: "MSS_ANY" SkillLevel: 1 Rate: 10000 @@ -414,7 +531,7 @@ mob_skill_db:( } /**********************************************************************/ YellowRose: { - NPC_SUMMONMONSTER: { + NPC_SUMMONSLAVE: { SkillState: "MSS_ANY" SkillLevel: 1 Rate: 10000 @@ -428,7 +545,7 @@ mob_skill_db:( } /**********************************************************************/ BlueRose: { - NPC_SUMMONMONSTER: { + NPC_SUMMONSLAVE: { SkillState: "MSS_ANY" SkillLevel: 2 Rate: 10000 @@ -436,13 +553,13 @@ mob_skill_db:( Delay: 3000 SkillTarget: "MST_SELF" CastCondition: "MSC_SLAVELE" - ConditionData: 3 + ConditionData: 2 val0: 1029 } } /**********************************************************************/ RedRose: { - NPC_SUMMONMONSTER: { + NPC_SUMMONSLAVE: { SkillState: "MSS_ANY" SkillLevel: 1 Rate: 10000 @@ -454,6 +571,29 @@ mob_skill_db:( val0: 1029 } } + /**********************************************************************/ + GoldenScorpion: { + SM_BASH: { + SkillState: "MSS_BERSERK" + SkillLevel: 6 + Rate: 1800 + Delay: 20000 + Cancelable: true + SkillTarget: "MST_TARGET" + CastCondition: "MSC_ATTACKPCGE" + ConditionData: 2 + } + NPC_SILENCEATTACK: { + SkillState: "MSS_BERSERK" + SkillLevel: 2 + Rate: 9800 + Delay: 40000 + CastTime: 700 + Cancelable: true + SkillTarget: "MST_TARGET" + CastCondition: "MSC_LONGRANGEATTACKED" + } + } } ) diff --git a/db/re/mob_skill_db.txt b/db/re/mob_skill_db.txt deleted file mode 100644 index 4af6834b..00000000 --- a/db/re/mob_skill_db.txt +++ /dev/null @@ -1,74 +0,0 @@ -// Mob Skill Database -// Based on Aegis Episode 14.2 -// -// Structure of Database: -// MobID,Dummy value (info only),State,SkillID,SkillLv,Rate,CastTime,Delay,Cancelable,Target,Condition type,Condition value,val1,val2,val3,val4,val5,Emotion,Chat -// -// RATE: the chance of the skill being casted when the condition is fulfilled (10000 = 100%). -// DELAY: the time (in milliseconds) before attempting to recast the same skill. -// -// STATE: -// any (except dead) / idle (in standby) / walk (in movement) / dead (on killed) / -// loot /attack / angry (like attack, except player has not attacked mob yet) / -// chase (following target, after being attacked) / follow (following target, -// without being attacked) / anytarget (attack+angry+chase+follow) -// -// TARGET: -// target (current target) / self / friend / master / randomtarget (any enemy within skill's range) -// -// The following are for ground-skills, a random target tile is selected from the specified area: -// around1 (3x3 area around self) / around2 (5x5 area around self) / -// around3 (7x7 area around self) / around4 (9x9 area around self) / -// around5 (3x3 area around target) / around6 (5x5 area around target) / -// around7 (7x7 area around target) / around8 (9x9 area around target) / -// around = around4 -// -// CONDITION: -// always Unconditional (no condition value). -// onspawn When mob spawns/respawns (no condition value). -// myhpltmaxrate When mob's HP drops to the specified %. -// myhpinrate When mob's HP is in a certain % range (condition value = lower bound, val1 = upper bound). -// mystatuson If mob has the specified abnormality in status. -// mystatusoff If mob has ended the specified abnormality in status. -// friendhpltmaxrate When mob's friend's HP drops to the specified %. -// friendhpinrate When mob's friend's HP is in a certain % range (condition value = lower bound, val1 = upper bound). -// friendstatuson If friend has the specified abnormality in status. -// friendstatusoff If friend has ended the specified abnormality in status. -// attackpcgt When attack PCs become greater than specified number. -// attackpcge When attack PCs become greater than or equal to the specified number. -// slavelt When number of slaves is less than the original specified number. -// slavele When number of slaves is less than or equal to the original specified number. -// closedattacked When close range melee attacked (no condition value). -// longrangeattacked When long range attacked, ex. bows, guns, ranged skills (no condition value). -// skillused When the specified skill is used on the mob. -// afterskill After mob casts the specified skill. -// casttargeted When a target is in cast range (no condition value). -// rudeattacked When mob is rude attacked (no condition value). -// -// Status abnormalities specified through the statuson/statusoff system: -// anybad (any type of state change) / stone / freeze / stun / sleep / -// poison / curse / silence / confusion / blind / hiding / sight (unhidden) -// -// Note: if a negative MobID is provided, the skill will be treated as 'global': -// -1: added for all boss types. -// -2: added for all normal types. -// -4: added for all mobs. -//id,name@skill,state,skillid,skilllevel,rate,casttime,delay,cancel,target,cond1,cond2,val0,val1,val2,val3,val4,emotion,chat -1005,Ratto@NPC_POISON,attack,176,20,500,0,500,yes,target,always,0,,,,,,, -1008,Blub@NPC_SUMMONSLAVE,any,196,4,10000,700,60000,no,self,onspawn,0,1007,,,,,, -1010,Crocotree@NPC_REBIRTH,dead,208,2,10000,0,0,yes,self,always,0,,,,,,, -1010,Crocotree@NPC_TRANSFORMATION,any,198,1,10000,700,60000,no,self,afterskill,208,1014,,,,,, -1012,Frostiana@NPC_POISON,attack,176,5,1000,0,2000,yes,target,always,0,,,,,,, -1013,Pikpik@NPC_SELFDESTRUCTION,attack,173,1,10000,1000,0,no,self,always,0,,,,,,, -1013,Pikpik@NPC_SELFDESTRUCTION,chase,173,1,2000,1000,0,no,self,always,0,,,,,,, -1014,Croconut@NPC_SUICIDE,any,175,1,10000,1000,0,no,self,always,0,,,,,,, -1015,Tipiu@NPC_SUMMONSLAVE,idle,196,6,10000,0,0,no,self,onspawn,0,1003,,,,,, -1015,Tipiu@NPC_SUMMONSLAVE,attack,196,2,2000,700,10000,no,self,slavele,5,1003,,,,,, -1015,Tipiu@NPC_SUMMONSLAVE,idle,196,2,7000,700,10000,no,self,slavele,5,1003,,,,,, -1016,Tipiou@NPC_SUMMONSLAVE,idle,196,5,10000,0,0,no,self,onspawn,0,1002,,,,,, -1016,Tipiou@NPC_SUMMONSLAVE,attack,196,2,2000,700,10000,no,self,slavele,4,1002,,,,,, -1016,Tipiou@NPC_SUMMONSLAVE,idle,196,2,7000,700,10000,no,self,slavele,4,1002,,,,,, -1024,Green Slime@NPC_SUMMONMONSTER,dead,209,2,10000,0,0,no,self,always,2,1025,,,,,, -1029,Bee@NPC_POISON,attack,176,20,1000,0,500,yes,anytarget,always,0,0,10,,,,, -1034,PinkFlower@NPC_SUMMONSLAVE,any,196,1,2000,1000,10000,no,self,slavelt,4,1058,,,,,, -1100,PoisonSkull@NPC_POISON,attack,176,20,2500,0,100,yes,target,always,0,,,,,,, diff --git a/db/re/skill_db.conf b/db/re/skill_db.conf index 6c190ed2..30cc7466 100644 --- a/db/re/skill_db.conf +++ b/db/re/skill_db.conf @@ -1984,16 +1984,16 @@ skill_db: ( AttackType: "Weapon" Element: "Ele_Poison" SkillData2: { - Lv1: 15000 - Lv2: 20000 - Lv3: 25000 - Lv4: 30000 - Lv5: 35000 - Lv6: 40000 - Lv7: 45000 - Lv8: 50000 - Lv9: 55000 - Lv10: 60000 + Lv1: 20000 + Lv2: 40000 + Lv3: 60000 + Lv4: 80000 + Lv5: 100000 + Lv6: 120000 + Lv7: 140000 + Lv8: 160000 + Lv9: 180000 + Lv10: 200000 } FixedCastTime: 0 Requirements: { @@ -38642,4 +38642,14 @@ skill_db: ( Self: true } }, +{ + Id: 20003 + Name: "EVOL_MONSTER_IDENTIFY" + Description: "Monster Identify" + MaxLevel: 1 + SkillType: { + Self: true + } + CoolDown: 3000 +}, ) diff --git a/db/re/skill_tree.conf b/db/re/skill_tree.conf index 4927fb3e..f604479d 100644 --- a/db/re/skill_tree.conf +++ b/db/re/skill_tree.conf @@ -85,6 +85,7 @@ Human: { MG_COLDBOLT: 0 EVOL_MASS_PROVOKE: 0 EVOL_PHYSICAL_SHIELD: 0 + EVOL_MONSTER_IDENTIFY: 0 } } @@ -148,6 +149,7 @@ DarkUkar: { MG_COLDBOLT: 0 EVOL_MASS_PROVOKE: 0 EVOL_PHYSICAL_SHIELD: 0 + EVOL_MONSTER_IDENTIFY: 0 } } @@ -211,6 +213,7 @@ FireKralog: { MG_COLDBOLT: 0 EVOL_MASS_PROVOKE: 0 EVOL_PHYSICAL_SHIELD: 0 + EVOL_MONSTER_IDENTIFY: 0 } } @@ -274,6 +277,7 @@ LightRaijin: { MG_COLDBOLT: 0 EVOL_MASS_PROVOKE: 0 EVOL_PHYSICAL_SHIELD: 0 + EVOL_MONSTER_IDENTIFY: 0 } } @@ -337,6 +341,7 @@ BlueTritan: { MG_COLDBOLT: 0 EVOL_MASS_PROVOKE: 0 EVOL_PHYSICAL_SHIELD: 0 + EVOL_MONSTER_IDENTIFY: 0 } } diff --git a/maps/re/008-1-1.mcache b/maps/re/008-1-1.mcache Binary files differindex 5a8705a2..704869a3 100644 --- a/maps/re/008-1-1.mcache +++ b/maps/re/008-1-1.mcache diff --git a/maps/re/008-1-2.mcache b/maps/re/008-1-2.mcache Binary files differnew file mode 100644 index 00000000..7c9d08f7 --- /dev/null +++ b/maps/re/008-1-2.mcache diff --git a/maps/re/008-1.mcache b/maps/re/008-1.mcache Binary files differindex a819d56d..38c10582 100644 --- a/maps/re/008-1.mcache +++ b/maps/re/008-1.mcache diff --git a/maps/re/008-3-0.mcache b/maps/re/008-3-0.mcache Binary files differindex 5a291c6f..1dfb2b2b 100644 --- a/maps/re/008-3-0.mcache +++ b/maps/re/008-3-0.mcache diff --git a/maps/re/008-3-1.mcache b/maps/re/008-3-1.mcache Binary files differindex e34f7676..849c3f33 100644 --- a/maps/re/008-3-1.mcache +++ b/maps/re/008-3-1.mcache diff --git a/maps/re/008-4-1.mcache b/maps/re/008-3-2.mcache Binary files differindex c64a3c80..c64a3c80 100644 --- a/maps/re/008-4-1.mcache +++ b/maps/re/008-3-2.mcache diff --git a/maps/re/012-1.mcache b/maps/re/012-1.mcache Binary files differnew file mode 100644 index 00000000..2a30e443 --- /dev/null +++ b/maps/re/012-1.mcache diff --git a/maps/re/012-2-1.mcache b/maps/re/012-2-1.mcache Binary files differnew file mode 100644 index 00000000..6f602134 --- /dev/null +++ b/maps/re/012-2-1.mcache diff --git a/maps/re/012-2-2.mcache b/maps/re/012-2-2.mcache Binary files differnew file mode 100644 index 00000000..d8436dd3 --- /dev/null +++ b/maps/re/012-2-2.mcache diff --git a/maps/re/012-2-3.mcache b/maps/re/012-2-3.mcache Binary files differnew file mode 100644 index 00000000..c31a8f8c --- /dev/null +++ b/maps/re/012-2-3.mcache diff --git a/maps/re/012-2-4.mcache b/maps/re/012-2-4.mcache Binary files differnew file mode 100644 index 00000000..2ac98ccd --- /dev/null +++ b/maps/re/012-2-4.mcache diff --git a/maps/re/012-2-5.mcache b/maps/re/012-2-5.mcache Binary files differnew file mode 100644 index 00000000..4a9977a9 --- /dev/null +++ b/maps/re/012-2-5.mcache diff --git a/maps/re/012-2-6.mcache b/maps/re/012-2-6.mcache Binary files differnew file mode 100644 index 00000000..a868f507 --- /dev/null +++ b/maps/re/012-2-6.mcache diff --git a/maps/re/012-2-7.mcache b/maps/re/012-2-7.mcache Binary files differnew file mode 100644 index 00000000..7cfae81f --- /dev/null +++ b/maps/re/012-2-7.mcache diff --git a/maps/re/sec_pri.mcache b/maps/re/sec_pri.mcache Binary files differnew file mode 100644 index 00000000..e51c52a8 --- /dev/null +++ b/maps/re/sec_pri.mcache diff --git a/npc/000-0/sailors.txt b/npc/000-0/sailors.txt index f412c19c..76870170 100644 --- a/npc/000-0/sailors.txt +++ b/npc/000-0/sailors.txt @@ -35,7 +35,7 @@ OnTouch: setcamnpc "Sailors", 0, -32; mesn "Human Voice"; - mesq lg("Why Frenchy? It's a Russian!"); + mesq lg("I think he's from the East..."); next; setcamnpc "Sailors", 144, -80; @@ -45,7 +45,7 @@ OnTouch: setcamnpc; mesn "Raijin Voice"; - mesq lg("You stupid, she's English, look at the shape of her head.", "You stupid, he's English, look at the shape of his head."); + mesq lg("You think she's from the East? As in... Ancea?", "You think he's from the East? As in... Ancea?"); next; mesq l("Hey you! Can you hear us? Are you okay?"); next; diff --git a/npc/000-2-0/julia.txt b/npc/000-2-0/julia.txt index 1fde8713..24635648 100644 --- a/npc/000-2-0/julia.txt +++ b/npc/000-2-0/julia.txt @@ -289,7 +289,7 @@ OnTouch: next; mesq lg("I'm glad to see you're okay."); next; - mesq lg("Could I ask you what your native language is? A sailor told me you're Russian, but another one told me you're French... I'm a bit lost. I will register you on the ship passenger list just after that."); + mesq lg("Could I ask you what your native language is? A sailor told me you're from Ancea, but another one told me you're from Aemil because of the logo that... never mind. I'm a bit lost, if you could tell me what language you speak I will register you on the ship passenger list just after that."); next; chooseLang; mainMenu; diff --git a/npc/000-2-1/arpan.txt b/npc/000-2-1/arpan.txt index 98cd05dc..8c06ce48 100644 --- a/npc/000-2-1/arpan.txt +++ b/npc/000-2-1/arpan.txt @@ -7,6 +7,7 @@ // Variable: // 0 ShipQuests_Arpan // 1 ShipQuests_Julia +// 2 ShipQuests_ArpanMoney // Values: // 00 Has not talked to Arpan yet. // 01 Talked to Arpan and needs to get the clothes. @@ -15,6 +16,10 @@ // 10 Has not talked to Julia // 11 Need to see Julia // 12 Has been registered by Julia +// 20 Does not knows about money +// 21 Has not taken possession from Arpan +// 22 Took money from Arpan +// 23 Took money and clothes (Legacy only) 000-2-1,49,36,0 script LeftDoorCheck NPC_HIDDEN,0,0,{ .@q = getq(ShipQuests_Arpan); @@ -84,6 +89,7 @@ L_EquipDone: close; } +///////////////////////////////////////////////////////////////////////////// 000-2-1,49,33,0 script Magic Arpan NPC_MAGIC_ARPAN,{ .@q = getq(ShipQuests_Arpan); .@q_nard = getq(ShipQuests_Nard); @@ -152,6 +158,7 @@ L_Menu: l("Who are you?"), L_Who, rif(getq(ShipQuests_ArpanMoney) == 1, lg("Do you know what happened to the gold I had when you guys saved me?")), L_WhereMoney, rif(getq(ShipQuests_ArpanMoney) < 2, l("Where are my old clothes?")), L_WhereOldClothes, + rif(getq(ShipQuests_ArpanMoney) == 2 && LEGACY, l("About my my old clothes...")), L_LegacyClothes, rif(!.@equipped, lg("What should I do after taking these clothes?")), L_WhatCloth, rif(!.@equipped, l("Thank you, I'll take them and put them on.")), -, l("Nothing, sorry."), -; @@ -204,6 +211,25 @@ L_WhereOldClothes: Zeny += 10; message strcharinfo(0), l("You receive @@ E!", 10); + if (LEGACY) + goto L_LegacyClothes; + + goto L_BeforeMenu; + +L_LegacyClothes: + if (LEGACY) { + mesn strcharinfo(0); + select + lg("But... I remember that my clothes were very dear to me..."), + l("Oh okay."); + mes ""; + if (@menu == 1) { + mesn; + mesq l("Well, you can have them back, but they're yayaya, mostly destroyed. Not sure what yeye are going to do with that."); + getitem ClothesPack, 1; + setq ShipQuests_ArpanMoney, 3; + } + } goto L_BeforeMenu; L_WhereMoney: diff --git a/npc/000-2-1/peter.txt b/npc/000-2-1/peter.txt index 060fa660..06825f0c 100644 --- a/npc/000-2-1/peter.txt +++ b/npc/000-2-1/peter.txt @@ -256,6 +256,7 @@ OnTimeout: // It's not _buggy_, it is just reckless. I would like a setting to restrict it // to destroy only instances owned by the char, or to destroy by name :p OnDone: + warp "000-2-1", 72, 36; .@q3 = getq3(ShipQuests_Peter); //instance_destroy(.@q3); if (@peter) diff --git a/npc/000-2-2/ratto.txt b/npc/000-2-2/ratto.txt index 14f98201..d30ccd17 100644 --- a/npc/000-2-2/ratto.txt +++ b/npc/000-2-2/ratto.txt @@ -86,12 +86,13 @@ OnRatto4Death: // This label is reached when all rattos are dead. We clear the respawn timers // (as we are going to delete the instance map anyway), warp you outside, and // from there onwards, Peter handles properly rewarding you. -L_Victor: - warp "000-2-1", 72, 36; +OnVictor: deltimer("RattosControl::OnRatto1Respawn"); deltimer("RattosControl::OnRatto2Respawn"); deltimer("RattosControl::OnRatto3Respawn"); deltimer("RattosControl::OnRatto4Respawn"); - doevent("Peter::OnDone"); + addtimercount("Peter::OnTimeout", 5000); + addtimer(5000, "Peter::OnDone"); + dispbottom l("It looks like all monsters were killed."); end; } diff --git a/npc/000-2-3/elmo.txt b/npc/000-2-3/elmo.txt index c623e321..4f4714f1 100644 --- a/npc/000-2-3/elmo.txt +++ b/npc/000-2-3/elmo.txt @@ -21,7 +21,7 @@ sailortalk; } - if (getq(ShipQuests_ArpanMoney) == 2) + if (getq(ShipQuests_ArpanMoney) >= 2) { got_money; } diff --git a/npc/001-1/enora.txt b/npc/001-1/enora.txt index bf2f7b16..e2e4064b 100644 --- a/npc/001-1/enora.txt +++ b/npc/001-1/enora.txt @@ -440,10 +440,7 @@ OnInit: end; } -001-1,0,0,0 script Mobs#001-1 NPC_HIDDEN,{ - end; - -OnNPCKillEvent: +function script EnoraKills { if (getq(ArtisQuests_Enora) == 10 && killedrid == Fluffy && strcharinfo(PC_MAP) == "001-1" @@ -451,5 +448,6 @@ OnNPCKillEvent: { setq(ArtisQuests_Enora, 10, getq2(ArtisQuests_Enora) + 1); } - end; + return; } + diff --git a/npc/001-1/rowboathelper.txt b/npc/001-1/rowboathelper.txt index 19c27be6..7cd419e4 100644 --- a/npc/001-1/rowboathelper.txt +++ b/npc/001-1/rowboathelper.txt @@ -41,10 +41,6 @@ close; } -// Make sure to unmount the boat when player dies -OnPCDieEvent: - setmount 0; - OnInit: .distance = 1; } @@ -120,3 +116,9 @@ OnInit: .sex = G_OTHER; .distance = 1; } + +function script ForcedUnmount { + setmount 0; + return; +} + diff --git a/npc/001-2-19/lloyd.txt b/npc/001-2-19/lloyd.txt index e2f02ec0..a0051caa 100644 --- a/npc/001-2-19/lloyd.txt +++ b/npc/001-2-19/lloyd.txt @@ -233,15 +233,14 @@ OnInit: .sex = G_MALE; .distance = 4; end; +} -OnPCLoginEvent: +function script FixBankVault { if (#MerchantBank) { BankVault += max(0, #MerchantBank); #MerchantBank = 0; } - // If you're inside a cave, update spotlights - if (strpos(getmap(), "-3-") >= 0) - updateSpotlight(); - end; + return; } + diff --git a/npc/001-2-22/peter.txt b/npc/001-2-22/peter.txt index 85d80bbb..9c4402a2 100644 --- a/npc/001-2-22/peter.txt +++ b/npc/001-2-22/peter.txt @@ -256,6 +256,7 @@ OnTimeout: // It's not _buggy_, it is just reckless. I would like a setting to restrict it // to destroy only instances owned by the char, or to destroy by name :p OnDone: + warp "001-2-22", 72, 36; .@q3 = getq3(ShipQuests_Peter); //instance_destroy(.@q3); if (@peter) diff --git a/npc/001-2-23/ratto.txt b/npc/001-2-23/ratto.txt index 9b4130f6..24bb1e1a 100644 --- a/npc/001-2-23/ratto.txt +++ b/npc/001-2-23/ratto.txt @@ -87,11 +87,12 @@ OnRatto4Death: // (as we are going to delete the instance map anyway), warp you outside, and // from there onwards, Peter handles properly rewarding you. L_Victor: - warp "001-2-22", 72, 36; deltimer("RattosControl#Artis::OnRatto1Respawn"); deltimer("RattosControl#Artis::OnRatto2Respawn"); deltimer("RattosControl#Artis::OnRatto3Respawn"); deltimer("RattosControl#Artis::OnRatto4Respawn"); - doevent("Peter#Artis::OnDone"); + addtimercount("Peter#Artis::OnTimeout", 5000); + addtimer(5000, "Peter#Artis::OnDone"); + dispbottom l("It looks like all monsters were killed."); end; } diff --git a/npc/001-2-32/_import.txt b/npc/001-2-32/_import.txt index 9043352d..b59046e0 100644 --- a/npc/001-2-32/_import.txt +++ b/npc/001-2-32/_import.txt @@ -1,4 +1,4 @@ -// Map 001-2-32: unnamed +// Map 001-2-32: Training Arena Lobby // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/001-2-32/_warps.txt", "npc/001-2-32/doors.txt", diff --git a/npc/001-2-32/_warps.txt b/npc/001-2-32/_warps.txt index 306493cb..4db4b354 100644 --- a/npc/001-2-32/_warps.txt +++ b/npc/001-2-32/_warps.txt @@ -1,3 +1,3 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. -// Map 001-2-32: unnamed warps +// Map 001-2-32: Training Arena Lobby warps 001-2-32,27,33,0 warp #001-2-32_27_33 0,0,001-2-33,39,33 diff --git a/npc/001-2-34/_import.txt b/npc/001-2-34/_import.txt index 326973e6..9ec74d40 100644 --- a/npc/001-2-34/_import.txt +++ b/npc/001-2-34/_import.txt @@ -1,4 +1,4 @@ -// Map 001-2-34: unnamed +// Map 001-2-34: Training Room Lobby // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/001-2-34/_warps.txt", "npc/001-2-34/doors.txt", diff --git a/npc/001-2-34/_warps.txt b/npc/001-2-34/_warps.txt index 1311f071..06f74a95 100644 --- a/npc/001-2-34/_warps.txt +++ b/npc/001-2-34/_warps.txt @@ -1,3 +1,3 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. -// Map 001-2-34: unnamed warps +// Map 001-2-34: Training Room Lobby warps 001-2-34,29,33,0 warp #001-2-34_29_33 0,0,001-2-33,29,33 diff --git a/npc/001-2-34/samantha.txt b/npc/001-2-34/samantha.txt index f49e15aa..a571ccf6 100644 --- a/npc/001-2-34/samantha.txt +++ b/npc/001-2-34/samantha.txt @@ -7,10 +7,6 @@ 001-2-34,29,27,0 script Samantha NPC_SAMANTHA,{ mesn; mesq lg("Look who we have here, did you come for a training session?"); - - goto L_Close; - -L_Close: close; OnInit: diff --git a/npc/001-2-35/_import.txt b/npc/001-2-35/_import.txt index 969d9e1c..797b852a 100644 --- a/npc/001-2-35/_import.txt +++ b/npc/001-2-35/_import.txt @@ -1,4 +1,3 @@ -// Map 001-2-35: unnamed +// Map 001-2-35: Training Arena // This file is generated automatically. All manually added changes will be removed when running the Converter. -"npc/001-2-35/_warps.txt", "npc/001-2-35/mapflags.txt", diff --git a/npc/001-2-36/_import.txt b/npc/001-2-36/_import.txt index 57397efd..403b0b12 100644 --- a/npc/001-2-36/_import.txt +++ b/npc/001-2-36/_import.txt @@ -1,4 +1,4 @@ -// Map 001-2-36: unnamed +// Map 001-2-36: Training Room // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/001-2-36/_warps.txt", "npc/001-2-36/hector.txt", diff --git a/npc/001-2-36/_warps.txt b/npc/001-2-36/_warps.txt index 530050a7..bcb74de9 100644 --- a/npc/001-2-36/_warps.txt +++ b/npc/001-2-36/_warps.txt @@ -1,3 +1,3 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. -// Map 001-2-36: unnamed warps +// Map 001-2-36: Training Room warps 001-2-36,37,30,0 warp #001-2-36_37_30 0,0,001-2-34,24,29 diff --git a/npc/001-2-36/hector.txt b/npc/001-2-36/hector.txt index f4c7176f..d25ca9e3 100644 --- a/npc/001-2-36/hector.txt +++ b/npc/001-2-36/hector.txt @@ -451,7 +451,7 @@ OnInit: // here input some sentences "hello noob" like, the npc pick randomly a sentence setarray .mockingGreeting$[0], "Hey noob!", "Hey somethingwholooklikeawarrior...", "Sup' chibi."; - setarray .mobID[0],0, Dummy, FireDummy, Dummy2; // an array of dummies, one for each training + setarray .mobID[0],0, Dummy, FireDummy, Dummy; // an array of dummies, one for each training setarray .mobCoordinate[0], 24, 34, 31, 41; // this represent the square of "ring" training end; diff --git a/npc/001-2-37/_import.txt b/npc/001-2-37/_import.txt index 05315d64..03162e19 100644 --- a/npc/001-2-37/_import.txt +++ b/npc/001-2-37/_import.txt @@ -1,4 +1,4 @@ -// Map 001-2-37: unnamed +// Map 001-2-37: Legion West Wing // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/001-2-37/_savepoints.txt", "npc/001-2-37/_warps.txt", diff --git a/npc/001-2-37/_savepoints.txt b/npc/001-2-37/_savepoints.txt index cd68fab2..30d7a797 100644 --- a/npc/001-2-37/_savepoints.txt +++ b/npc/001-2-37/_savepoints.txt @@ -1,5 +1,5 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. -// Map 001-2-37: unnamed saves +// Map 001-2-37: Legion West Wing saves 001-2-37,25,41,0 script #save_001-2-37_25_41 NPC_SAVE_POINT,0,0,{ savepointparticle .map$, .x, .y, NO_INN; close; diff --git a/npc/001-2-37/_warps.txt b/npc/001-2-37/_warps.txt index f6997b5f..dabc5285 100644 --- a/npc/001-2-37/_warps.txt +++ b/npc/001-2-37/_warps.txt @@ -1,4 +1,4 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. -// Map 001-2-37: unnamed warps +// Map 001-2-37: Legion West Wing warps 001-2-37,37,28,0 warp #001-2-37_37_28 0,0,001-2-33,24,30 001-2-37,37,33,0 warp #001-2-37_37_33 0,0,001-2-39,24,33 diff --git a/npc/001-2-38/_import.txt b/npc/001-2-38/_import.txt index e60aa3f9..63d2a402 100644 --- a/npc/001-2-38/_import.txt +++ b/npc/001-2-38/_import.txt @@ -1,4 +1,4 @@ -// Map 001-2-38: unnamed +// Map 001-2-38: Legion East Wing // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/001-2-38/_savepoints.txt", "npc/001-2-38/_warps.txt", diff --git a/npc/001-2-38/_savepoints.txt b/npc/001-2-38/_savepoints.txt index d4e4db2c..59be0f59 100644 --- a/npc/001-2-38/_savepoints.txt +++ b/npc/001-2-38/_savepoints.txt @@ -1,5 +1,5 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. -// Map 001-2-38: unnamed saves +// Map 001-2-38: Legion East Wing saves 001-2-38,25,41,0 script #save_001-2-38_25_41 NPC_SAVE_POINT,0,0,{ savepointparticle .map$, .x, .y, NO_INN; close; diff --git a/npc/001-2-38/_warps.txt b/npc/001-2-38/_warps.txt index 9139345a..53e119b5 100644 --- a/npc/001-2-38/_warps.txt +++ b/npc/001-2-38/_warps.txt @@ -1,4 +1,4 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. -// Map 001-2-38: unnamed warps +// Map 001-2-38: Legion East Wing warps 001-2-38,23,28,0 warp #001-2-38_23_28 0,0,001-2-33,44,30 001-2-38,23,33,0 warp #001-2-38_23_33 0,0,001-2-39,44,33 diff --git a/npc/001-2-39/_import.txt b/npc/001-2-39/_import.txt index 8ceee767..f3a2043a 100644 --- a/npc/001-2-39/_import.txt +++ b/npc/001-2-39/_import.txt @@ -1,4 +1,4 @@ -// Map 001-2-39: unnamed +// Map 001-2-39: Legion Command Room // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/001-2-39/_warps.txt", "npc/001-2-39/mapflags.txt", diff --git a/npc/001-2-39/_warps.txt b/npc/001-2-39/_warps.txt index 527acae5..1a25cfd3 100644 --- a/npc/001-2-39/_warps.txt +++ b/npc/001-2-39/_warps.txt @@ -1,4 +1,4 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. -// Map 001-2-39: unnamed warps +// Map 001-2-39: Legion Command Room warps 001-2-39,45,33,0 warp #001-2-39_45_33 0,0,001-2-38,24,33 001-2-39,23,33,0 warp #001-2-39_23_33 0,0,001-2-37,36,33 diff --git a/npc/001-2-40/trozz.txt b/npc/001-2-40/trozz.txt index b695f1bc..5cb02840 100644 --- a/npc/001-2-40/trozz.txt +++ b/npc/001-2-40/trozz.txt @@ -5,19 +5,63 @@ // Chief of the Legion of Aemil of the city of Artis. 001-2-40,36,46,0 script Trozz#001-2-40 NPC_HUMAN_MALE_CHIEF_ARTIS_LEGION,{ + function Bureaucracy; + function Dueling; mesn; mesq l("Hi. I am Trozz, and I am the chief of legion training in Artis."); next; mesn; mesq l("If you want to challenge someone for a friendly match, you are at the right place."); next; - mesn; - mesq l("But if you need to deal with more burocratic stuff, go talk to Q'Anon. He is the boss here."); + do + { + select + l("That's everything, thanks."), + l("I'm looking to have some paperwork fixed."), + l("How can I challenge someone for a match?"); + mes ""; + switch (@menu) { + case 1: + goodbye(); + break; + case 2: + Bureaucracy(); + break; + case 3: + Dueling(); + break; + } + } while (@menu != 1); close; +function Bureaucracy { + mesn; + mesq l("If you need to deal with more bureaucratic stuff, go talk to Q'Anon. He is the boss here."); + next; + mesn; + mesq l("You can find him upstairs. Go left, then go right, and you'll find him."); + next; + return; +} + +function Dueling { + mesn; + mesq l("First, you need to use %s to enter in duel mode.", b("@duel")); + next; + mesn; + mesq l("Then, to challenge a player, you'll use \"%s <player_name>\".", b("@invite")); + next; + mesn; + mesq l("If you were invited to the duel instead, you can use %s or %s.", b("@accept"), b("@reject")); + next; + mesn; + mesq l("You can exit duel mode with %s. You'll also leave it by death.", b("@leave")); + next; + return; +} + OnInit: .sex = G_MALE; .distance = 4; end; } - diff --git a/npc/001-2-41/edouard.txt b/npc/001-2-41/edouard.txt index f93d2042..2a3fd4cc 100644 --- a/npc/001-2-41/edouard.txt +++ b/npc/001-2-41/edouard.txt @@ -131,6 +131,7 @@ OnChair: 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?"), + l("How about changing my gender?"), l("What's your story again?"), l("I'm fine for now, thank you."); @@ -142,19 +143,25 @@ OnChair: case 2: BarberChangeStyle; speech S_FIRST_BLANK_LINE | S_LAST_NEXT, - l("Enjoy your new style."); + 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("I hope you like this color."), l("Anything else?"); break; case 4: - tellStory; + BarberChangeGender(); + speech S_FIRST_BLANK_LINE | S_LAST_NEXT, + l("You look fantastic."), + l("Anything else?"); break; case 5: + tellStory; + break; + case 6: speech S_FIRST_BLANK_LINE | S_LAST_NEXT, l("Feel free to come visit me another time."); diff --git a/npc/001-3-0/mundane.txt b/npc/001-3-0/mundane.txt index 95e9e465..01cde3e8 100644 --- a/npc/001-3-0/mundane.txt +++ b/npc/001-3-0/mundane.txt @@ -152,28 +152,6 @@ OnMove: addtimer(150, instance_npcname(.name$, @MUNDANE_INSTID)+"::OnMove"); end; -OnPCLogoutEvent: - if (getq(ArtisQuests_MonaDad) != 2) end; - setq ArtisQuests_MonaDad, 1; - end; - -OnPCDieEvent: - if (getq(ArtisQuests_MonaDad) != 2) end; - setq ArtisQuests_MonaDad, 1; - dispbottom l("What a pity! You've died."); - - // We must disable Mona's Dad NPC sprite if you are still on the map - // This will cause the NPC to "vanish", player is left to guess that he ran - // back to where he originally was. - // (ie. The NPC won't be fine without you if we have code to handle that). - // NOTE: Maybe we could send the NPC running back to his original position? - // For future thought and testing by anyone interested. - getmapxy(.@m$, .@x, .@y, 0); - if (.@m$ ~= "mona@*") { - disablenpc(instance_npcname(.name$, @MUNDANE_INSTID)); - } - end; - OnInit: .sex = G_MALE; .distance = 3; @@ -204,3 +182,26 @@ OnInstanceInit: } +function script MundaneLogout { + if (getq(ArtisQuests_MonaDad) != 2) end; + setq ArtisQuests_MonaDad, 1; + return; +} + +function script MundaneDeath { + if (getq(ArtisQuests_MonaDad) != 2) end; + setq ArtisQuests_MonaDad, 1; + dispbottom l("What a pity! You've died."); + + // We must disable Mona's Dad NPC sprite if you are still on the map + // This will cause the NPC to "vanish", player is left to guess that he ran + // back to where he originally was. + // (ie. The NPC won't be fine without you if we have code to handle that). + // NOTE: Maybe we could send the NPC running back to his original position? + // For future thought and testing by anyone interested. + if (strpos(getmap(), "mona@") >= 0) { + disablenpc(instance_npcname(.name$, @MUNDANE_INSTID)); + } + return; +} + diff --git a/npc/008-1-1/_import.txt b/npc/008-1-1/_import.txt index be748cf8..4788f56c 100644 --- a/npc/008-1-1/_import.txt +++ b/npc/008-1-1/_import.txt @@ -4,3 +4,5 @@ "npc/008-1-1/_warps.txt", "npc/008-1-1/galimatia.txt", "npc/008-1-1/koga.txt", +"npc/008-1-1/morcant.txt", +"npc/008-1-1/sign.txt", diff --git a/npc/008-1-1/_mobs.txt b/npc/008-1-1/_mobs.txt index 35a0bc0f..e836fe97 100644 --- a/npc/008-1-1/_mobs.txt +++ b/npc/008-1-1/_mobs.txt @@ -2,7 +2,7 @@ // Map 008-1-1: Woodland mobs 008-1-1,173,86,25,5 monster Forest Maggot 1028,12,500,2500 008-1-1,132,56,7,5 monster Forest Maggot 1028,5,500,2500 -008-1-1,144,91,11,16 monster Butterfly 1032,8,10000,10000 +008-1-1,74,59,9,16 monster Butterfly 1032,4,20000,10000 008-1-1,63,73,11,5 monster Maggot 1026,7,500,10000 008-1-1,206,87,6,4 monster Mouboo 1023,3,30000,60000 008-1-1,131,45,0,0 monster Beehive 1056,1,30000,100000 @@ -17,9 +17,15 @@ 008-1-1,112,75,2,2 monster Pink Flower 1034,1,100,10000 008-1-1,110,46,3,2 monster Mauve Plant 1036,3,1000,2000 008-1-1,159,93,9,7 monster Silkworm 1040,4,3000,6000 -008-1-1,68,29,7,7 monster Mouboo 1023,3,30000,60000 +008-1-1,62,36,7,7 monster Mouboo 1023,3,30000,60000 008-1-1,126,45,0,0 monster Beehive 1056,1,30000,100000 008-1-1,121,45,0,0 monster Beehive 1056,1,30000,100000 008-1-1,163,178,2,1 monster Red Rose 1062,1,50000,10000 008-1-1,158,191,3,1 monster Yellow Rose 1060,1,20000,5000 008-1-1,166,184,1,1 monster Blue Rose 1061,1,100000,20000 +008-1-1,137,88,11,16 monster Butterfly 1032,8,10000,10000 +008-1-1,75,41,14,4 monster Silkworm 1040,3,9000,6000 +008-1-1,122,75,8,4 monster Forest Maggot 1028,3,50000,2500 +008-1-1,96,45,1,0 monster Red Rose 1062,1,50000,10000 +008-1-1,97,47,2,0 monster Yellow Rose 1060,1,20000,5000 +008-1-1,99,45,0,0 monster Blue Rose 1061,1,100000,20000 diff --git a/npc/008-1-1/_warps.txt b/npc/008-1-1/_warps.txt index 11a32b86..db9189dc 100644 --- a/npc/008-1-1/_warps.txt +++ b/npc/008-1-1/_warps.txt @@ -3,3 +3,4 @@ 008-1-1,247,85,0 warp #008-1-1_247_85 0,1,008-1,21,85 008-1-1,202,47,0 warp #008-1-1_202_47 0,0,008-3-0,129,112 008-1-1,51,57,0 warp #008-1-1_51_57 0,0,008-2-32,40,37 +008-1-1,181,198,0 warp #008-1-1_181_198 1,0,008-1-2,180,32 diff --git a/npc/008-1-1/morcant.txt b/npc/008-1-1/morcant.txt new file mode 100644 index 00000000..afb35ad8 --- /dev/null +++ b/npc/008-1-1/morcant.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Morcant the Captain, taking care on harbor issues. +// THIS IS A PLACEHOLDER! + +008-1-1,58,57,0 script Morcant NPC_MORCANT,{ + speech + l("Hello."), + l("My name is Morcant. I am a Captain, a bit bored since this harbor is not frequented much."), + l("I would like to offer you food and tell you stories, but.. have you ever heard of WildX? I won't need to say more, do I?"); + + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/008-1-1/sign.txt b/npc/008-1-1/sign.txt new file mode 100644 index 00000000..df554c2d --- /dev/null +++ b/npc/008-1-1/sign.txt @@ -0,0 +1,24 @@ +// Evol scripts. +// Authors: +// Micksha +// Description: +// Sign pillars in West Woodland. + +008-1-1,53,58,0 script Sign#008-1-1-merchant NPC_NO_SPRITE,{ + npctalkonce l("Merchant House"); + close; + +OnInit: + .distance = 1; + .sex = G_OTHER; + end; +} +008-1-1,157,87,0 script Sign#008-1-1-central NPC_NO_SPRITE,{ + npctalkonce l("Right: Hurnscald | Down: Swamp"); + close; + +OnInit: + .distance = 2; + .sex = G_OTHER; + end; +} diff --git a/npc/008-4-1/_import.txt b/npc/008-1-2/_import.txt index 0f706bbc..f49fc06e 100644 --- a/npc/008-4-1/_import.txt +++ b/npc/008-1-2/_import.txt @@ -1,5 +1,4 @@ -// Map 008-4-1: Cave Of Trials +// Map 008-1-2: Swamp // This file is generated automatically. All manually added changes will be removed when running the Converter. -"npc/008-4-1/_mobs.txt", -"npc/008-4-1/_warps.txt", -"npc/008-4-1/boss.txt", +"npc/008-1-2/_warps.txt", +"npc/008-1-2/sign.txt", diff --git a/npc/008-1-2/_warps.txt b/npc/008-1-2/_warps.txt new file mode 100644 index 00000000..c7ee0e45 --- /dev/null +++ b/npc/008-1-2/_warps.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Map 008-1-2: Swamp warps +008-1-2,181,31,0 warp #008-1-2_181_31 1,0,008-1-1,180,197 +008-1-2,249,48,0 warp #008-1-2_249_48 0,0,008-1,23,216 diff --git a/npc/008-1-2/sign.txt b/npc/008-1-2/sign.txt new file mode 100644 index 00000000..73b011e3 --- /dev/null +++ b/npc/008-1-2/sign.txt @@ -0,0 +1,34 @@ +// Evol scripts. +// Authors: +// Micksha +// Description: +// Sign pillars in West Woodland. + +008-1-2,218,80,0 script Sign#008-1-2-northeast NPC_NO_SPRITE,{ + npctalkonce l("Up: West Woodland | Right: Dimond's Cove | Left: Sorentown"); + close; +OnInit: + .distance = 2; + .sex = G_OTHER; + end; +} + +008-1-2,145,80,0 script Sign#008-1-2-sorentown NPC_NO_SPRITE,{ + npctalkonce l("Left: Asphodel Moor | Right: All directions"); + close; + +OnInit: + .distance = 2; + .sex = G_OTHER; + end; +} + +008-1-2,39,192,0 script Sign#008-1-2-asphodel NPC_NO_SPRITE,{ + npctalkonce l("Down: Graveyard (under construction) | Up: All directions"); + close; + +OnInit: + .distance = 2; + .sex = G_OTHER; + end; +} diff --git a/npc/008-1/_import.txt b/npc/008-1/_import.txt index 018577b5..812a33fa 100644 --- a/npc/008-1/_import.txt +++ b/npc/008-1/_import.txt @@ -17,6 +17,7 @@ "npc/008-1/oscar.txt", "npc/008-1/sabine.txt", "npc/008-1/shop.txt", +"npc/008-1/sign.txt", "npc/008-1/snarfles.txt", "npc/008-1/soul-menhir.txt", "npc/008-1/voltain.txt", diff --git a/npc/008-1/_warps.txt b/npc/008-1/_warps.txt index d0d93314..500ad1ae 100644 --- a/npc/008-1/_warps.txt +++ b/npc/008-1/_warps.txt @@ -25,5 +25,6 @@ 008-1,233,131,0 warp #008-1_233_131 0,0,008-2-29,36,24 008-1,287,133,0 warp #008-1_287_133 0,0,008-2-30,52,39 008-1,20,85,0 warp #008-1_20_85 0,1,008-1-1,246,85 -008-1,165,171,0 warp #008-1_165_171 0,0,008-4-1,175,19 +008-1,165,171,0 warp #008-1_165_171 0,0,008-3-2,175,19 008-1,289,125,0 warp #008-1_289_125 0,0,008-2-31,29,25 +008-1,22,216,0 warp #008-1_22_216 0,0,008-1-2,248,48 diff --git a/npc/008-1/milly.txt b/npc/008-1/milly.txt index 0ea17a1c..1ca72cee 100644 --- a/npc/008-1/milly.txt +++ b/npc/008-1/milly.txt @@ -25,6 +25,17 @@ // Description: // robberies in hurnscald +// Give player a Beanie Copter after 1,000,000 kills (server-wide) +function script GetBeanieCopter { + // Double-check against possible malpractices + if ($MONSTERS_KILLED % 1000000 == 0) { + announce(sprintf("Congratulations, \"%s\", on killing the %sth monster!.", strcharinfo(0), format_number($MONSTERS_KILLED)), bc_all); + getitem BeanieCopter, 1; + dispbottom l("How strange, this monster dropped a very rare hat!"); + } + return; +} + 008-1,282,114,0 script Milly NPC_GIRL_MILLY,{ // TODO: make the actual beanie copter quest after those are finished: diff --git a/npc/008-1/sign.txt b/npc/008-1/sign.txt new file mode 100644 index 00000000..17099ba4 --- /dev/null +++ b/npc/008-1/sign.txt @@ -0,0 +1,50 @@ +// Evol scripts. +// Authors: +// Micksha +// Description: +// Sign pillars in Hurnscald. + +008-1,142,105,0 script Sign#008-1-central NPC_NO_SPRITE,{ + npctalkonce l("Right: Hurnscald | Down: Dimond's Cove | Left: West Woodland | Up: Nivalis (under construction)"); + close; +OnInit: + .distance = 2; + .sex = G_OTHER; + end; +} + +008-1,126,160,0 script Sign#008-1-south NPC_NO_SPRITE,{ + npctalkonce l("Down: Dimond's Cove | Left: Swamp"); + close; +OnInit: + .distance = 2; + .sex = G_OTHER; + end; +} + +008-1,246,177,0 script Sign#008-1-southeast NPC_NO_SPRITE,{ + npctalkonce l("Left: Dimond's Cove | Up: Hurnscald | Right: Forsaken Inn"); + close; +OnInit: + .distance = 2; + .sex = G_OTHER; + end; +} + +008-1,251,104,0 script Sign#008-1-hurns NPC_NO_SPRITE,{ + npctalkonce l("Left: West Woodland | Up: North Mine | Right: Harbor | Down: other directions"); + close; +OnInit: + .distance = 2; + .sex = G_OTHER; + end; +} + +008-1,247,105,0 script Sign#008-1-4144 NPC_NO_SPRITE,{ + npctalkonce l("This place is dedicated to 4144, the alltime Hero."); + close; +OnInit: + .distance = 1; + .sex = G_OTHER; + end; +} diff --git a/npc/008-2-32/_import.txt b/npc/008-2-32/_import.txt index c9137dc7..ba8aa591 100644 --- a/npc/008-2-32/_import.txt +++ b/npc/008-2-32/_import.txt @@ -1,3 +1,4 @@ // Map 008-2-32: Merchant House // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/008-2-32/_warps.txt", +"npc/008-2-32/thamas.txt", diff --git a/npc/008-2-32/thamas.txt b/npc/008-2-32/thamas.txt new file mode 100644 index 00000000..f824493f --- /dev/null +++ b/npc/008-2-32/thamas.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Thamas the soldier. +// THIS IS A PLACEHOLDER! + +008-2-32,36,31,0 script Thamas NPC_THAMAS,{ + speech + l("Hi there."), + l("I am a legion soldier who never talks much, until Jesusalva or WildX puts words in my mouth."), + l("Until then, let me be quiet. Talk to you later."); + + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/008-3-0/_mobs.txt b/npc/008-3-0/_mobs.txt index f7062926..372c3898 100644 --- a/npc/008-3-0/_mobs.txt +++ b/npc/008-3-0/_mobs.txt @@ -1,7 +1,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Map 008-3-0: Rossy Cave mobs -008-3-0,83,62,21,7 monster Cave Maggot 1027,5,500,2000 -008-3-0,101,117,13,7 monster Cave Maggot 1027,5,500,2000 +008-3-0,30,113,7,14 monster Cave Maggot 1027,5,500,2000 +008-3-0,102,116,14,8 monster Cave Maggot 1027,5,500,2000 008-3-0,79,144,10,6 monster Cave Maggot 1027,7,500,2000 008-3-0,158,87,10,12 monster Cave Maggot 1027,7,500,2000 008-3-0,34,28,3,4 monster Poison Skull 1100,1,35000,60000 @@ -10,13 +10,74 @@ 008-3-0,128,146,5,3 monster Ratto 1005,4,35000,15000 008-3-0,120,61,5,3 monster Ratto 1005,4,35000,15000 008-3-0,138,64,10,7 monster Crafty 1018,10,1000,120000 -008-3-0,130,103,9,6 monster Crafty 1018,6,1000,120000 +008-3-0,129,102,11,6 monster Crafty 1018,6,1000,120000 008-3-0,67,114,10,2 monster Spider 1044,3,4000,8000 008-3-0,109,145,4,10 monster Spider 1044,5,4000,8000 008-3-0,68,84,3,7 monster Spider 1044,4,4000,8000 -008-3-0,83,166,0,0 monster Ruby Vein 1051,1,600000,60000 008-3-0,80,169,0,0 monster Diamond Vein 1045,1,600000,60000 -008-3-0,89,168,0,0 monster Emerald Vein 1052,1,600000,60000 -008-3-0,100,180,0,0 monster Topaz Vein 1054,1,600000,60000 -008-3-0,97,176,0,0 monster Sapphire Vein 1053,1,600000,60000 -008-3-0,94,180,0,0 monster Amethyst Vein 1055,1,600000,60000 +008-3-0,118,96,0,0 monster Gem Veinbloc 1069,1,600000,60000 +008-3-0,131,93,0,0 monster Gem Veinbloc 1069,1,600000,60000 +008-3-0,119,101,0,0 monster Gold Veinbloc 1070,1,600000,60000 +008-3-0,113,60,23,8 monster Cave Maggot 1027,7,500,2000 +008-3-0,199,68,8,9 monster Crafty 1018,5,1000,60000 +008-3-0,160,47,17,5 monster Crafty 1018,5,1000,120000 +008-3-0,119,200,20,4 monster Spider 1044,5,4000,8000 +008-3-0,34,193,11,9 monster Spider 1044,5,4000,8000 +008-3-0,26,115,5,17 monster Spider 1044,5,4000,8000 +008-3-0,82,60,21,7 monster Cave Maggot 1027,5,500,2000 +008-3-0,38,193,16,4 monster Cave Maggot 1027,5,500,2000 +008-3-0,114,199,12,3 monster Ratto 1005,4,35000,15000 +008-3-0,106,30,10,7 monster Crafty 1018,5,1000,120000 +008-3-0,78,128,11,21 monster Ratto 1005,4,35000,15000 +008-3-0,117,141,35,11 monster Crafty 1018,10,1000,120000 +008-3-0,117,101,18,11 monster Ratto 1005,7,35000,15000 +008-3-0,130,88,0,0 monster Ruby Vein 1051,1,600000,60000 +008-3-0,122,94,0,0 monster Ruby Vein 1051,1,600000,60000 +008-3-0,31,181,0,0 monster Sapphire Vein 1053,1,600000,60000 +008-3-0,31,198,0,0 monster Sapphire Vein 1053,1,600000,60000 +008-3-0,135,127,0,0 monster Topaz Vein 1054,1,600000,60000 +008-3-0,120,125,0,0 monster Topaz Vein 1054,1,600000,60000 +008-3-0,31,112,0,0 monster Amethyst Vein 1055,1,600000,60000 +008-3-0,24,123,0,0 monster Amethyst Vein 1055,1,600000,60000 +008-3-0,193,123,0,0 monster Emerald Vein 1052,1,600000,60000 +008-3-0,204,116,0,0 monster Emerald Vein 1052,1,600000,60000 +008-3-0,89,168,0,0 monster Diamond Vein 1045,1,600000,60000 +008-3-0,132,192,0,0 monster Sapphire Vein 1053,1,600000,60000 +008-3-0,39,174,0,0 monster Amethyst Vein 1055,1,600000,60000 +008-3-0,44,174,0,0 monster Topaz Vein 1054,1,600000,60000 +008-3-0,118,196,0,0 monster Emerald Vein 1052,1,600000,60000 +008-3-0,65,105,0,0 monster Diamond Vein 1045,1,600000,60000 +008-3-0,143,139,0,0 monster Gem Veinbloc 1069,1,600000,60000 +008-3-0,156,121,0,0 monster Gem Veinbloc 1069,1,600000,60000 +008-3-0,155,166,0,0 monster Gem Veinbloc 1069,1,600000,60000 +008-3-0,125,162,0,0 monster Gem Veinbloc 1069,1,600000,60000 +008-3-0,107,141,0,0 monster Gem Veinbloc 1069,1,600000,60000 +008-3-0,77,148,0,0 monster Gem Veinbloc 1069,1,600000,60000 +008-3-0,62,119,0,0 monster Gem Veinbloc 1069,1,600000,60000 +008-3-0,162,95,0,0 monster Gem Veinbloc 1069,1,600000,60000 +008-3-0,157,66,0,0 monster Gem Veinbloc 1069,1,600000,60000 +008-3-0,112,60,0,0 monster Gem Veinbloc 1069,1,600000,60000 +008-3-0,66,54,0,0 monster Gem Veinbloc 1069,1,600000,60000 +008-3-0,63,91,0,0 monster Gold Veinbloc 1070,1,600000,60000 +008-3-0,76,127,0,0 monster Gold Veinbloc 1070,1,600000,60000 +008-3-0,111,148,0,0 monster Gold Veinbloc 1070,1,600000,60000 +008-3-0,101,27,3,4 monster Poison Skull 1100,1,35000,60000 +008-3-0,165,28,3,4 monster Poison Skull 1100,1,35000,60000 +008-3-0,199,67,3,4 monster Poison Skull 1100,1,35000,60000 +008-3-0,199,109,3,4 monster Poison Skull 1100,1,35000,60000 +008-3-0,197,194,3,4 monster Poison Skull 1100,1,35000,60000 +008-3-0,133,199,3,4 monster Poison Skull 1100,1,35000,60000 +008-3-0,34,194,3,4 monster Poison Skull 1100,1,35000,60000 +008-3-0,26,111,3,4 monster Poison Skull 1100,1,35000,60000 +008-3-0,88,48,0,0 monster Coal Vein 1048,1,600000,60000 +008-3-0,100,49,0,0 monster Coal Vein 1048,1,600000,60000 +008-3-0,130,44,0,0 monster Coal Vein 1048,1,600000,60000 +008-3-0,67,47,0,0 monster Coal Vein 1048,1,600000,60000 +008-3-0,124,94,0,0 monster Coal Vein 1048,1,600000,60000 +008-3-0,158,60,0,0 monster Coal Vein 1048,1,600000,60000 +008-3-0,56,53,0,0 monster Iron Vein 1047,1,600000,60000 +008-3-0,55,98,0,0 monster Iron Vein 1047,1,600000,60000 +008-3-0,62,103,0,0 monster Iron Vein 1047,1,600000,60000 +008-3-0,69,125,0,0 monster Iron Vein 1047,1,600000,60000 +008-3-0,62,153,0,0 monster Iron Vein 1047,1,600000,60000 +008-3-0,96,145,0,0 monster Iron Vein 1047,1,600000,60000 diff --git a/npc/008-3-2/_import.txt b/npc/008-3-2/_import.txt new file mode 100644 index 00000000..3249121c --- /dev/null +++ b/npc/008-3-2/_import.txt @@ -0,0 +1,4 @@ +// Map 008-3-2: Calamity Dungeon +// This file is generated automatically. All manually added changes will be removed when running the Converter. +"npc/008-3-2/_mobs.txt", +"npc/008-3-2/_warps.txt", diff --git a/npc/008-3-2/_mobs.txt b/npc/008-3-2/_mobs.txt new file mode 100644 index 00000000..4c0dfbd0 --- /dev/null +++ b/npc/008-3-2/_mobs.txt @@ -0,0 +1,7 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Map 008-3-2: Calamity Dungeon mobs +008-3-2,106,73,73,63 monster Cave Maggot 1027,80,30000,2500 +008-3-2,136,71,47,50 monster Thief Slime 1105,35,50000,2500 +008-3-2,101,83,73,30 monster AngryCrafty 1103,60,50000,2500 +008-3-2,100,79,32,31 monster Black Scorpion 1104,14,45000,2500 +008-3-2,94,98,11,9 monster Green Slime 1024,4,500,2500 diff --git a/npc/008-3-2/_warps.txt b/npc/008-3-2/_warps.txt new file mode 100644 index 00000000..e69305bc --- /dev/null +++ b/npc/008-3-2/_warps.txt @@ -0,0 +1,3 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Map 008-3-2: Calamity Dungeon warps +008-3-2,175,19,0 warp #008-3-2_175_19 2,0,008-1,165,170 diff --git a/npc/008-4-1/boss.txt b/npc/008-3-2/boss.txt index fda71fff..5a296ce9 100644 --- a/npc/008-4-1/boss.txt +++ b/npc/008-3-2/boss.txt @@ -2,10 +2,10 @@ // Author: // Jesusalva // Description: -// Controls the boss on 008-4-1 and the Master Book Learning +// Controls the boss on 008-3-2 and the Master Book Learning // see npc/items/master_skillbook.txt for explanation about variables -008-4-1,0,0,0 script #BossCtrl_008-4-1 NPC_HIDDEN,{ +008-3-2,0,0,0 script #BossCtrl_008-3-2 NPC_HIDDEN,{ end; // Test server: 15 minutes only @@ -17,8 +17,8 @@ OnTimer900000: OnTimer3600000: stopnpctimer; OnInit: - $@MB_00841=0; - monster "008-4-1", 67, 30, strmobinfo(1, GameBalance), GameBalance, 1, "#BossCtrl_008-4-1::OnBossDeath"; + $@MB_00832=0; + monster "008-3-2", 67, 30, strmobinfo(1, SpiderQueen), SpiderQueen, 1, "#BossCtrl_008-3-2::OnBossDeath"; end; OnBossDeath: @@ -28,16 +28,16 @@ OnBossDeath: .@party=getcharid(1); if (.@party > 0) { - $@MB_00841=.@party; - areatimer("008-4-1", .@x-15, .@y-15, .@x+15, .@y+15, 10, "#BossCtrl_008-4-1::OnBossCheck"); - mapannounce "008-4-1", "Boss deafeated by Party: " + getpartyname(.@party), bc_all; + $@MB_00832=.@party; + areatimer("008-3-2", .@x-15, .@y-15, .@x+15, .@y+15, 10, "#BossCtrl_008-3-2::OnBossCheck"); + mapannounce "008-3-2", "Boss deafeated by Party: " + getpartyname(.@party), bc_all; } else { - $@MB_00841=-2; - areatimer("008-4-1", .@x-15, .@y-15, .@x+15, .@y+15, 10, "#BossCtrl_008-4-1::OnBossCheck"); - addtimer(20, "#BossCtrl_008-4-1::OnBegin"); - mapannounce "008-4-1", "Boss deafeated by: " + strcharinfo(0), bc_all; + $@MB_00832=-2; + areatimer("008-3-2", .@x-15, .@y-15, .@x+15, .@y+15, 10, "#BossCtrl_008-3-2::OnBossCheck"); + addtimer(20, "#BossCtrl_008-3-2::OnBegin"); + mapannounce "008-3-2", "Boss deafeated by: " + strcharinfo(0), bc_all; } end; @@ -45,14 +45,14 @@ OnBossCheck: @mb_BossId=-1; // TODO: Check if you really fought or was just lurking // Check if party is correct - if (getcharid(1) != $@MB_00841) + if (getcharid(1) != $@MB_00832) end; OnBegin: - @mb_BossId=GameBalance; - @mb_SkillId=MG_COLDBOLT; + @mb_BossId=SpiderQueen; + @mb_SkillId=TF_POISON; @mb_ItemId=MagicFeather; // Placeholder @mb_ItemAm=1; - addtimer(15000, "#BossCtrl_008-4-1::OnFinish"); + addtimer(15000, "#BossCtrl_008-3-2::OnFinish"); end; OnFinish: diff --git a/npc/008-4-1/_mobs.txt b/npc/008-4-1/_mobs.txt deleted file mode 100644 index ad992a8d..00000000 --- a/npc/008-4-1/_mobs.txt +++ /dev/null @@ -1,7 +0,0 @@ -// This file is generated automatically. All manually added changes will be removed when running the Converter. -// Map 008-4-1: Cave Of Trials mobs -008-4-1,106,73,73,63 monster Cave Maggot 1027,80,30000,2500 -008-4-1,136,71,47,50 monster Thief Slime 1105,35,50000,2500 -008-4-1,101,83,73,30 monster AngryCrafty 1103,60,50000,2500 -008-4-1,100,79,32,31 monster Black Scorpion 1104,14,45000,2500 -008-4-1,94,98,11,9 monster Green Slime 1024,4,500,2500 diff --git a/npc/012-1/_import.txt b/npc/012-1/_import.txt new file mode 100644 index 00000000..47036b7f --- /dev/null +++ b/npc/012-1/_import.txt @@ -0,0 +1,14 @@ +// Map 012-1: Candor Island +// This file is generated automatically. All manually added changes will be removed when running the Converter. +"npc/012-1/_warps.txt", +"npc/012-1/aahna.txt", +"npc/012-1/aidan.txt", +"npc/012-1/ayasha.txt", +"npc/012-1/crasmande.txt", +"npc/012-1/hasan.txt", +"npc/012-1/ishi.txt", +"npc/012-1/kaan.txt", +"npc/012-1/liana.txt", +"npc/012-1/prawors.txt", +"npc/012-1/vincent.txt", +"npc/012-1/zegas.txt", diff --git a/npc/012-1/_warps.txt b/npc/012-1/_warps.txt new file mode 100644 index 00000000..ada06743 --- /dev/null +++ b/npc/012-1/_warps.txt @@ -0,0 +1,8 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Map 012-1: Candor Island warps +012-1,38,115,0 warp #012-1_38_115 0,0,012-2-1,52,38 +012-1,50,104,0 warp #012-1_50_104 0,0,012-2-6,26,38 +012-1,65,105,0 warp #012-1_65_105 0,0,012-2-5,29,43 +012-1,64,95,0 warp #012-1_64_95 0,0,012-2-3,33,36 +012-1,51,93,0 warp #012-1_51_93 0,0,012-2-7,30,34 +012-1,57,101,0 warp #012-1_57_101 0,0,012-2-4,31,43 diff --git a/npc/012-1/aahna.txt b/npc/012-1/aahna.txt new file mode 100644 index 00000000..12df0924 --- /dev/null +++ b/npc/012-1/aahna.txt @@ -0,0 +1,18 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Aahna, a low quality NPC ;) +// THIS IS A PLACEHOLDER! + +012-1,99,64,0 script Aahna NPC_AAHNA,{ + speech + l("Welcome."), + l("Someone was too lazy to even write a placeholder text, so please come back later"); + close; + +OnInit: + .sex = G_FEMALE; + .distance = 2; + end; +} diff --git a/npc/012-1/aidan.txt b/npc/012-1/aidan.txt new file mode 100644 index 00000000..1ff47e45 --- /dev/null +++ b/npc/012-1/aidan.txt @@ -0,0 +1,18 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Aidan, a dawdler in Candor. +// THIS IS A PLACEHOLDER! + +012-1,52,114,0 script Aidan NPC_AIDAN,{ + speech + l("Welcome."), + l("Someone was too lazy to even write a placeholder text, so please come back later"); + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/012-1/ayasha.txt b/npc/012-1/ayasha.txt new file mode 100644 index 00000000..623954f6 --- /dev/null +++ b/npc/012-1/ayasha.txt @@ -0,0 +1,18 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Vincent, a child at the Candor beach. +// THIS IS A PLACEHOLDER! + +012-1,65,111,0 script Ayasha NPC_AYASHA,{ + speech + l("Welcome."), + l("Someone was too lazy to even write a placeholder text, so please come back later"); + close; + +OnInit: + .sex = G_FEMALE; + .distance = 2; + end; +} diff --git a/npc/012-1/crasmande.txt b/npc/012-1/crasmande.txt new file mode 100644 index 00000000..5aef9e89 --- /dev/null +++ b/npc/012-1/crasmande.txt @@ -0,0 +1,18 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Crasmande, the scared man. +// THIS IS A PLACEHOLDER! + +012-1,41,44,0 script Crasmande NPC_CRASMANDE,{ + speech + l("Welcome."), + l("Someone was too lazy to even write a placeholder text, so please come back later"); + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/012-1/hasan.txt b/npc/012-1/hasan.txt new file mode 100644 index 00000000..52a53f18 --- /dev/null +++ b/npc/012-1/hasan.txt @@ -0,0 +1,18 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Hasan, the bad guy. +// THIS IS A PLACEHOLDER! + +012-1,39,44,0 script Hasan NPC_HASAN,{ + speech + l("Welcome."), + l("Someone was too lazy to even write a placeholder text, so please come back later"); + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/012-1/ishi.txt b/npc/012-1/ishi.txt new file mode 100644 index 00000000..c2390d4a --- /dev/null +++ b/npc/012-1/ishi.txt @@ -0,0 +1,18 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Ishi, former trade-in for monster points. +// THIS IS A PLACEHOLDER! + +012-1,53,114,0 script Ishi NPC_ISHI,{ + speech + l("Welcome."), + l("Someone was too lazy to even write a placeholder text, so please come back later"); + close; + +OnInit: + .sex = G_FEMALE; + .distance = 2; + end; +} diff --git a/npc/012-1/kaan.txt b/npc/012-1/kaan.txt new file mode 100644 index 00000000..4ce8b3ab --- /dev/null +++ b/npc/012-1/kaan.txt @@ -0,0 +1,18 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Kaan, a guy good for nothing. +// THIS IS A PLACEHOLDER! + +012-1,53,110,0 script Kaan NPC_KAAN,{ + speech + l("Welcome."), + l("Someone was too lazy to even write a placeholder text, so please come back later"); + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/012-1/liana.txt b/npc/012-1/liana.txt new file mode 100644 index 00000000..e2d318be --- /dev/null +++ b/npc/012-1/liana.txt @@ -0,0 +1,18 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Liana. +// THIS IS A PLACEHOLDER! + +012-1,65,117,0 script Liana NPC_LIANA,{ + speech + l("Welcome."), + l("Someone was too lazy to even write a placeholder text, so please come back later"); + close; + +OnInit: + .sex = G_FEMALE; + .distance = 2; + end; +} diff --git a/npc/012-1/prawors.txt b/npc/012-1/prawors.txt new file mode 100644 index 00000000..3ee9159a --- /dev/null +++ b/npc/012-1/prawors.txt @@ -0,0 +1,18 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Prawors, the captain in Candor. +// THIS IS A PLACEHOLDER! + +012-1,53,122,0 script Prawors NPC_PRAWORS,{ + speech + l("Welcome."), + l("Someone was too lazy to even write a placeholder text, so please come back later"); + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/012-1/vincent.txt b/npc/012-1/vincent.txt new file mode 100644 index 00000000..63f1268e --- /dev/null +++ b/npc/012-1/vincent.txt @@ -0,0 +1,18 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Vincent, a child at the Candor beach. +// THIS IS A PLACEHOLDER! + +012-1,121,126,0 script Vincent NPC_VINCENT,{ + speech + l("Welcome."), + l("Someone was too lazy to even write a placeholder text, so please come back later"); + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/012-1/zegas.txt b/npc/012-1/zegas.txt new file mode 100644 index 00000000..12437d57 --- /dev/null +++ b/npc/012-1/zegas.txt @@ -0,0 +1,18 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Zegas, the guy who want you to clean storage room. +// THIS IS A PLACEHOLDER! + +012-1,48,105,0 script Zegas NPC_ZEGAS,{ + speech + l("Welcome."), + l("Someone was too lazy to even write a placeholder text, so please come back later"); + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/012-2-1/_import.txt b/npc/012-2-1/_import.txt new file mode 100644 index 00000000..13ff23d2 --- /dev/null +++ b/npc/012-2-1/_import.txt @@ -0,0 +1,5 @@ +// Map 012-2-1: Sorfina's Home +// This file is generated automatically. All manually added changes will be removed when running the Converter. +"npc/012-2-1/_warps.txt", +"npc/012-2-1/jessie.txt", +"npc/012-2-1/tanisha.txt", diff --git a/npc/012-2-1/_warps.txt b/npc/012-2-1/_warps.txt new file mode 100644 index 00000000..4ccc3898 --- /dev/null +++ b/npc/012-2-1/_warps.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Map 012-2-1: Sorfina's Home warps +012-2-1,52,39,0 warp #012-2-1_52_39 0,0,012-1,38,116 +012-2-1,53,30,0 warp #012-2-1_53_30 0,0,012-2-2,30,34 diff --git a/npc/012-2-1/jessie.txt b/npc/012-2-1/jessie.txt new file mode 100644 index 00000000..c00e868d --- /dev/null +++ b/npc/012-2-1/jessie.txt @@ -0,0 +1,18 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Jessie, Sorfina's old husband. +// THIS IS A PLACEHOLDER! + +012-2-1,38,30,0 script Jessie NPC_JESSIE,{ + speech + l("Welcome."), + l("Someone was too lazy to even write a placeholder text, so please come back later"); + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/012-2-1/tanisha.txt b/npc/012-2-1/tanisha.txt new file mode 100644 index 00000000..94848971 --- /dev/null +++ b/npc/012-2-1/tanisha.txt @@ -0,0 +1,18 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Tanisha, the little girl in Sorfina's house. +// THIS IS A PLACEHOLDER! + +012-2-1,48,34,0 script Tanisha NPC_TANISHA,{ + speech + l("Welcome."), + l("Someone was too lazy to even write a placeholder text, so please come back later"); + close; + +OnInit: + .sex = G_FEMALE; + .distance = 2; + end; +} diff --git a/npc/012-2-2/_import.txt b/npc/012-2-2/_import.txt new file mode 100644 index 00000000..3990e3db --- /dev/null +++ b/npc/012-2-2/_import.txt @@ -0,0 +1,5 @@ +// Map 012-2-2: Sleeping Room +// This file is generated automatically. All manually added changes will be removed when running the Converter. +"npc/012-2-2/_savepoints.txt", +"npc/012-2-2/_warps.txt", +"npc/012-2-2/sorfina.txt", diff --git a/npc/012-2-2/_savepoints.txt b/npc/012-2-2/_savepoints.txt new file mode 100644 index 00000000..1aedace4 --- /dev/null +++ b/npc/012-2-2/_savepoints.txt @@ -0,0 +1,28 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Map 012-2-2: Sleeping Room saves +012-2-2,25,27,0 script #save_012-2-2_25_27 NPC_SAVE_POINT,0,0,{ + savepointparticle .map$, .x, .y, NO_INN; + close; + +OnInit: + .distance = 2; + .sex = G_OTHER; + end; + +OnTouch: + bedTouch(); + end; +} +012-2-2,28,27,0 script #save_012-2-2_28_27 NPC_SAVE_POINT,0,0,{ + savepointparticle .map$, .x, .y, NO_INN; + close; + +OnInit: + .distance = 2; + .sex = G_OTHER; + end; + +OnTouch: + bedTouch(); + end; +} diff --git a/npc/008-4-1/_warps.txt b/npc/012-2-2/_warps.txt index b1a26ad0..f174dc7c 100644 --- a/npc/008-4-1/_warps.txt +++ b/npc/012-2-2/_warps.txt @@ -1,3 +1,3 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. -// Map 008-4-1: Cave Of Trials warps -008-4-1,175,18,0 warp #008-4-1_175_18 2,0,008-1,165,170 +// Map 012-2-2: Sleeping Room warps +012-2-2,30,35,0 warp #012-2-2_30_35 0,0,012-2-1,53,31 diff --git a/npc/012-2-2/sorfina.txt b/npc/012-2-2/sorfina.txt new file mode 100644 index 00000000..682fa38d --- /dev/null +++ b/npc/012-2-2/sorfina.txt @@ -0,0 +1,18 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Sorfina, the former starting NPC. Could need a new job. +// THIS IS A PLACEHOLDER! + +012-2-2,26,30,0 script Sorfina NPC_SORFINA,{ + speech + l("Welcome."), + l("Someone was too lazy to even write a placeholder text, so please come back later"); + close; + +OnInit: + .sex = G_FEMALE; + .distance = 2; + end; +} diff --git a/npc/012-2-3/_import.txt b/npc/012-2-3/_import.txt new file mode 100644 index 00000000..e04ba715 --- /dev/null +++ b/npc/012-2-3/_import.txt @@ -0,0 +1,5 @@ +// Map 012-2-3: Candor Shop +// This file is generated automatically. All manually added changes will be removed when running the Converter. +"npc/012-2-3/_warps.txt", +"npc/012-2-3/cynric.txt", +"npc/012-2-3/nyle.txt", diff --git a/npc/001-2-35/_warps.txt b/npc/012-2-3/_warps.txt index d5939222..a64e4ecb 100644 --- a/npc/001-2-35/_warps.txt +++ b/npc/012-2-3/_warps.txt @@ -1,3 +1,3 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. -// Map 001-2-35: unnamed warps -001-2-35,23,29,0 warp #001-2-35_23_29 0,0,001-2-32,32,29 +// Map 012-2-3: Candor Shop warps +012-2-3,33,37,0 warp #012-2-3_33_37 0,0,012-1,64,96 diff --git a/npc/012-2-3/cynric.txt b/npc/012-2-3/cynric.txt new file mode 100644 index 00000000..83e2c00b --- /dev/null +++ b/npc/012-2-3/cynric.txt @@ -0,0 +1,18 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Cynric, Candor's banker. +// THIS IS A PLACEHOLDER! + +012-2-3,27,28,0 script Cynric NPC_CYNRIC,{ + speech + l("Welcome."), + l("Someone was too lazy to even write a placeholder text, so please come back later"); + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/012-2-3/nyle.txt b/npc/012-2-3/nyle.txt new file mode 100644 index 00000000..0c81127a --- /dev/null +++ b/npc/012-2-3/nyle.txt @@ -0,0 +1,18 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Nyle, Candor's shopkeeper. +// THIS IS A PLACEHOLDER! + +012-2-3,42,30,0 script Nyle NPC_NYLE,{ + speech + l("Welcome."), + l("Someone was too lazy to even write a placeholder text, so please come back later"); + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/012-2-4/_import.txt b/npc/012-2-4/_import.txt new file mode 100644 index 00000000..659fdc67 --- /dev/null +++ b/npc/012-2-4/_import.txt @@ -0,0 +1,5 @@ +// Map 012-2-4: Alchemy Hut +// This file is generated automatically. All manually added changes will be removed when running the Converter. +"npc/012-2-4/_warps.txt", +"npc/012-2-4/morgan.txt", +"npc/012-2-4/zitoni.txt", diff --git a/npc/012-2-4/_warps.txt b/npc/012-2-4/_warps.txt new file mode 100644 index 00000000..156a6e54 --- /dev/null +++ b/npc/012-2-4/_warps.txt @@ -0,0 +1,3 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Map 012-2-4: Alchemy Hut warps +012-2-4,31,44,0 warp #012-2-4_31_44 0,0,012-1,57,102 diff --git a/npc/012-2-4/morgan.txt b/npc/012-2-4/morgan.txt new file mode 100644 index 00000000..23e97aaf --- /dev/null +++ b/npc/012-2-4/morgan.txt @@ -0,0 +1,21 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Rosen, the salesman in Candor smith. +// THIS IS A PLACEHOLDER! + +012-2-4,26,37,0 script Morgan NPC_MORGAN,{ + speech + l("Hello Wanderer."), + l("I am Morgan, the alchimist."), + l("(People do not like to hear the word 'witch' so much, as we live close to Hurnscald)."), + l("Unfortunately my apprentice Zitoni does not bring fresh potions, so if you need something you should come back later."); + + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/012-2-4/zitoni.txt b/npc/012-2-4/zitoni.txt new file mode 100644 index 00000000..7b94cba3 --- /dev/null +++ b/npc/012-2-4/zitoni.txt @@ -0,0 +1,77 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Zitoni, Morgan's apprentice. +// THIS IS A PLACEHOLDER! + +012-2-4,40,37,0 script Zitoni NPC_ZITONI,{ + +OnTalk: + mesn "The man shivers"; + mesq l("The world is so cruel! Oh, cruel world!"); + next; + + menu + lg("I do not like whiners."), -, + lg("What is your problem?"), L_toams; + + close; + +L_toams: + mesn "He looks at you."; + mesq l("I would so much like to brew potions, but..."); + next; + mesq l("I CANNOT WALK!"); + next; + mesq l("Please, please try to find a guy named toams - he is capable to make me walk again! Please!"); + next; + + menu + lg("Ok, I can try."), -, + lg("Ok, but do you have something else?"), L_jez; + + close; + +L_jez: + mesq l("Oh, yes! So kind that you ask"); + next; + mesq l("I forgot my tasks to do!"); + next; + mesq l("If only I remembered what I was supposed to do!"); + next; + mesq l("Please, can you look for a guy named Jesusalva? I am very sure he remembers what kind of quest I was going to accomplish."); + next; + + menu + lg("Ok, I will do that, but now I must leave."), -, + lg("Is that all, or do you have more problems?"), L_wildx; + close; + +L_wildx: + mesq l("Unfortunately yes."); + next; + mesq l("I totally forgot why I am here, and what I am doing here!"); + next; + mesq l("Please, please find WildX. He will explain to me what my role in this world has been."); + + menu + lg("Ok, but all that will keep me busy for a while. So, goodbye."), -, + lg("You do not have more problems, do you?"), L_mick; + close; + +L_mick: + mesq l("Sure I have one more problem."); + next; + mesq l("Did you ever look at me?!? That ugly robe, that weird whatever I hold in my hand, my strange face and all that!"); + next; + mesq l("Can you do a last task for me and try to find Micksha? He sure can help me to look a bit less ugly."); + next; + mesq("That would be so helpful! Please return soon to tell me about your progress."); + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/012-2-5/_import.txt b/npc/012-2-5/_import.txt new file mode 100644 index 00000000..1a36bb4d --- /dev/null +++ b/npc/012-2-5/_import.txt @@ -0,0 +1,5 @@ +// Map 012-2-5: Candor Smith +// This file is generated automatically. All manually added changes will be removed when running the Converter. +"npc/012-2-5/_warps.txt", +"npc/012-2-5/rosen.txt", +"npc/012-2-5/toichi.txt", diff --git a/npc/012-2-5/_warps.txt b/npc/012-2-5/_warps.txt new file mode 100644 index 00000000..d5a52d94 --- /dev/null +++ b/npc/012-2-5/_warps.txt @@ -0,0 +1,3 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Map 012-2-5: Candor Smith warps +012-2-5,29,44,0 warp #012-2-5_29_44 0,0,012-1,65,106 diff --git a/npc/012-2-5/rosen.txt b/npc/012-2-5/rosen.txt new file mode 100644 index 00000000..3fa332c9 --- /dev/null +++ b/npc/012-2-5/rosen.txt @@ -0,0 +1,21 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Rosen, the salesman in Candor smith. +// THIS IS A PLACEHOLDER! + +012-2-5,31,34,0 script Rosen NPC_ROSEN,{ + speech + l("Welcome."), + l("I am Rosen, I am selling the best weapons and armor you can get on this island."), + l("If only Toichi would work harder, I could even offer you something. But meh. Like things are, you must try to return at a later point."), + l("Toichi, go to work! Stop drinking beer!"); + + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/012-2-5/toichi.txt b/npc/012-2-5/toichi.txt new file mode 100644 index 00000000..255c140a --- /dev/null +++ b/npc/012-2-5/toichi.txt @@ -0,0 +1,21 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Toichi, the smith in Candor island. +// THIS IS A PLACEHOLDER! + +012-2-5,40,35,0 script Toichi NPC_TOICHI,{ + speech + l("Hi there."), + l("My name is Toichi, and it seems I am the only one working on this lazy island."); + next; + l("So I kindly request you not to listen to that stupid Rosen, saying 'Toichi is lazy'."); + next; + l("At least I am doing something!"); + close; +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/012-2-6/_import.txt b/npc/012-2-6/_import.txt new file mode 100644 index 00000000..e239ad17 --- /dev/null +++ b/npc/012-2-6/_import.txt @@ -0,0 +1,3 @@ +// Map 012-2-6: Storage Room +// This file is generated automatically. All manually added changes will be removed when running the Converter. +"npc/012-2-6/_warps.txt", diff --git a/npc/012-2-6/_warps.txt b/npc/012-2-6/_warps.txt new file mode 100644 index 00000000..a56767e0 --- /dev/null +++ b/npc/012-2-6/_warps.txt @@ -0,0 +1,3 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Map 012-2-6: Storage Room warps +012-2-6,26,39,0 warp #012-2-6_26_39 0,0,012-1,50,105 diff --git a/npc/012-2-7/_import.txt b/npc/012-2-7/_import.txt new file mode 100644 index 00000000..fe642729 --- /dev/null +++ b/npc/012-2-7/_import.txt @@ -0,0 +1,4 @@ +// Map 012-2-7: Small House +// This file is generated automatically. All manually added changes will be removed when running the Converter. +"npc/012-2-7/_savepoints.txt", +"npc/012-2-7/_warps.txt", diff --git a/npc/012-2-7/_savepoints.txt b/npc/012-2-7/_savepoints.txt new file mode 100644 index 00000000..0230a227 --- /dev/null +++ b/npc/012-2-7/_savepoints.txt @@ -0,0 +1,15 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Map 012-2-7: Small House saves +012-2-7,26,31,0 script #save_012-2-7_26_31 NPC_SAVE_POINT,0,0,{ + savepointparticle .map$, .x, .y, NO_INN; + close; + +OnInit: + .distance = 2; + .sex = G_OTHER; + end; + +OnTouch: + bedTouch(); + end; +} diff --git a/npc/012-2-7/_warps.txt b/npc/012-2-7/_warps.txt new file mode 100644 index 00000000..29b5aab2 --- /dev/null +++ b/npc/012-2-7/_warps.txt @@ -0,0 +1,3 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Map 012-2-7: Small House warps +012-2-7,30,35,0 warp #012-2-7_30_35 0,0,012-1,51,94 diff --git a/npc/_anchors.txt b/npc/_anchors.txt index 1ca080cb..36315554 100644 --- a/npc/_anchors.txt +++ b/npc/_anchors.txt @@ -36,6 +36,7 @@ OnInit: htput(.ht, "^START2$", "000-0-0 26 28"); htput(.ht, "^START3$", "000-0-1 26 28"); htput(.ht, "^START|^BEGIN", "000-0 22 24"); - htput(.ht, "^VEIN", "008-3-0 85 172"); + htput(.ht, "^VEIN", "008-3-0 87 172"); htput(.ht, "^WARE", "001-2-18 37 31"); + htput(.ht, "^WEST|PORT", "008-1-1 52 60"); } diff --git a/npc/_import.txt b/npc/_import.txt index 4427e76b..7203a413 100644 --- a/npc/_import.txt +++ b/npc/_import.txt @@ -57,6 +57,7 @@ @include "npc/001-3-1/_import.txt" @include "npc/001-3-2/_import.txt" @include "npc/008-1-1/_import.txt" +@include "npc/008-1-2/_import.txt" @include "npc/008-1/_import.txt" @include "npc/008-2-0/_import.txt" @include "npc/008-2-1/_import.txt" @@ -93,7 +94,16 @@ @include "npc/008-2-9/_import.txt" @include "npc/008-3-0/_import.txt" @include "npc/008-3-1/_import.txt" -@include "npc/008-4-1/_import.txt" +@include "npc/008-3-2/_import.txt" +@include "npc/012-1/_import.txt" +@include "npc/012-2-1/_import.txt" +@include "npc/012-2-2/_import.txt" +@include "npc/012-2-3/_import.txt" +@include "npc/012-2-4/_import.txt" +@include "npc/012-2-5/_import.txt" +@include "npc/012-2-6/_import.txt" +@include "npc/012-2-7/_import.txt" +@include "npc/sec_pri/_import.txt" @include "npc/test/_import.txt" @include "npc/testbg/_import.txt" "npc/_anchors.txt", diff --git a/npc/commands/debug-look.txt b/npc/commands/debug-look.txt index 4ab9ed44..23acc4da 100644 --- a/npc/commands/debug-look.txt +++ b/npc/commands/debug-look.txt @@ -1,22 +1,19 @@ function script BarberDebug { function setGender { - //clear; - //setnpcdialogtitle l("Appearance Debug - Sex Change"); - //mes l("Please choose the desired gender:"); - //next; - //menuint - // l("Male"), G_MALE, - // l("Female"), G_FEMALE, - // l("Non-binary"), G_OTHER; + clear(); + setnpcdialogtitle(l("Appearance Debug - Gender Change")); + mes(l("Warning: changing your gender will send you back to the character selection screen.")); + mes(""); + mes(l("Please choose the desired gender:")); + next(); + menuint( + l("Male"), GENDER_MALE, + l("Female"), GENDER_FEMALE, + l("Non-binary"), GENDER_HIDDEN); - //Sex = @menuret; // FIXME: make this work like in tmwAthena - //return; - - - // ^ Future code, Doesn't work yet - closeclientdialog; - changecharsex; + Gender = @menuret; + return; } function setStyle { clear; @@ -57,7 +54,7 @@ function script BarberDebug { mes ""; mes "---"; - mes l("Gender") + ": " + Sex; + mes l("Gender") + ": " + genderToString(Gender); mes l("Hair style") + ": " + getlook(LOOK_HAIR); mes l("Hair color") + ": " + getlook(LOOK_HAIR_COLOR); mes l("Race") + ": " + Class + " (" + get_race() + ")";; diff --git a/npc/commands/gender.txt b/npc/commands/gender.txt new file mode 100644 index 00000000..b852beb0 --- /dev/null +++ b/npc/commands/gender.txt @@ -0,0 +1,35 @@ +// @gender atcommand +// changes or returns the gender + +- script @gender 32767,{ + end; + +OnCall: + if (.@atcmd_parameters$[0] == "") { + dispbottom("Your current gender is " + genderToString()); + end; + } + + .@desired = stringToGender(.@atcmd_parameters$[0]); + + if (.@desired == Gender) { + dispbottom("Your gender is already " + genderToString()); + } else { + Gender = .@desired; + dispbottom("Gender changed to " + genderToString()); + } + end; + +OnInit: + bindatcmd("gender", "@gender::OnCall", 99, 99, false); + add_group_command("gender", 40, true, false); + add_group_command("gender", 50, true, true); + add_group_command("gender", 60, true, true); + add_group_command("gender", 80, true, true); + + bindatcmd("changesex", "@gender::OnCall", 99, 99, false); + add_group_command("changesex", 40, true, false); + add_group_command("changesex", 50, true, true); + add_group_command("changesex", 60, true, true); + add_group_command("changesex", 80, true, true); +} diff --git a/npc/commands/mobinfo.txt b/npc/commands/mobinfo.txt new file mode 100644 index 00000000..691bfb68 --- /dev/null +++ b/npc/commands/mobinfo.txt @@ -0,0 +1,29 @@ +// The Mana World Script +// +// @monsterinfo <monsterAegis> +// Sends @mobinfo with a delay (moved from atcommand.conf) +// Requires EVOL_MONSTER_IDENTIFY +// +- script @monsterinfo 32767,{ + end; + +OnCall: + // Check for skill level + if (!getskilllv(EVOL_MONSTER_IDENTIFY)) + end; + + // ... + if (@rsync_delay > gettimetick(2)) { + dispbottom l("Not doing that to prevent flood."); + end; + } + + // Send @mobinfo and set a cooldown of 3 seconds. + atcommand("@mobinfo " + implode(.@atcmd_parameters$, " ")); + @rsync_delay=gettimetick(2)+3; + end; + +OnInit: + bindatcmd "monsterinfo", "@monsterinfo::OnCall", 0, 60, 0; + end; +} diff --git a/npc/commands/motd.txt b/npc/commands/motd.txt index e21d7539..2f6a5e2a 100644 --- a/npc/commands/motd.txt +++ b/npc/commands/motd.txt @@ -174,7 +174,14 @@ OnCall: closeclientdialog; end; -OnPCLoginEvent: +OnInit: + MOTD_debug_text; + .size = getarraysize($MOTD_Messages$); + .dsize = getarraysize($@Debug_Messages$); + bindatcmd "motd", "@motd::OnCall", 0, 99, 0; +} + +function script ReceiveMOTD { if ($MOTD_Disabled < 1) { displayMOTD; @@ -183,11 +190,5 @@ OnPCLoginEvent: { dispbottom "##7<<##B @@help://test-server|" + col(l("Click here for instructions on how to use the test server."),6) + "@@ ##7>>"; } - end; - -OnInit: - MOTD_debug_text; - .size = getarraysize($MOTD_Messages$); - .dsize = getarraysize($@Debug_Messages$); - bindatcmd "motd", "@motd::OnCall", 0, 99, 0; + return; } diff --git a/npc/commands/python.txt b/npc/commands/python.txt new file mode 100644 index 00000000..e2fdc5bf --- /dev/null +++ b/npc/commands/python.txt @@ -0,0 +1,24 @@ +// The Mana World script +// Author: Gumi <gumi@themanaworld.org> +// Author: Jesusalva <jesusalva@themanaworld.org> +// +// Stomp stomp stomp (use with caution) + +- script @python 32767,{ + end; + +// Soft Resync +OnCall: + specialeffect(69, AREA, playerattached()); + addtimer 380, .name$+"::OnKill"; + end; + +OnKill: + percentheal -100, -100; + //dispbottom l("Oh look, it is Cupid!"); + end; + +OnInit: + bindatcmd "python", "@python::OnCall", 20, 20, 1; + end; +} diff --git a/npc/commands/scheduled-broadcasts.txt b/npc/commands/scheduled-broadcasts.txt index 972a0cf2..720651b3 100644 --- a/npc/commands/scheduled-broadcasts.txt +++ b/npc/commands/scheduled-broadcasts.txt @@ -213,13 +213,15 @@ OnCall: closeclientdialog; end; -OnPCLoginEvent: +OnInit: + bindatcmd "sched", "@sched::OnCall", 0, 99, 0; +} + +function script ReceiveScheduledBroadcast { if ($@SCHED_Opt[0] && $@SCHED_Msg$ != "") { announce $@SCHED_Msg$, bc_self; } - end; - -OnInit: - bindatcmd "sched", "@sched::OnCall", 0, 99, 0; + return; } + diff --git a/npc/commands/super-menu.txt b/npc/commands/super-menu.txt index 8102dd32..5ed7ced3 100644 --- a/npc/commands/super-menu.txt +++ b/npc/commands/super-menu.txt @@ -46,21 +46,23 @@ OnCall: closeclientdialog; end; -OnPCLoginEvent: +OnInit: + bindatcmd "super", "@super::OnCall", 0, 99, 0; + bindatcmd "numa", "@super::OnCall", 0, 99, 0; // alias for those used to TMW's @numa +} + +function script GrantSuperSkill { .@debug_skill = getskilllv(EVOL_SUPER_MENU); if (.@debug_skill > 0 && !debug) { - skill EVOL_SUPER_MENU, 0, 0; // remove debug skill + skill EVOL_SUPER_MENU, 0, 0; // remove debug skill. Not needed (skill tree) } else if (.@debug_skill < 1 && debug) { skill EVOL_SUPER_MENU, 1, 0; // give debug skill } - end; - -OnInit: - bindatcmd "super", "@super::OnCall", 0, 99, 0; - bindatcmd "numa", "@super::OnCall", 0, 99, 0; // alias for those used to TMW's @numa + return; } + diff --git a/npc/functions/barber.txt b/npc/functions/barber.txt index 370285b7..1df0a307 100644 --- a/npc/functions/barber.txt +++ b/npc/functions/barber.txt @@ -108,3 +108,18 @@ function script BarberChangeColor { return; } + +function script BarberChangeGender { + mesn("Warning"); + mes(b(l("Changing your gender will send you back to the character selection screen."))); + next(); + + mes(l("Please select the desired gender:")); + menuint( + l("Female"), GENDER_FEMALE, + l("Male"), GENDER_MALE, + l("Non-binary"), GENDER_HIDDEN); + + Gender = @menuret; + return; +} diff --git a/npc/functions/fishing.txt b/npc/functions/fishing.txt index dcf4ac02..fee0acb7 100644 --- a/npc/functions/fishing.txt +++ b/npc/functions/fishing.txt @@ -44,8 +44,7 @@ OnBite: OnCleanUp: dispbottom l("You waited too long and lost the bait..."); specialeffect(getvariableofnpc(.failure_fx, @fishing_spot$), SELF, playerattached()); // event fail -OnPCLogoutEvent: - fishing_cleanup @fishing_spot$; + fishing_cleanup(@fishing_spot$); @fishing_spot$ = ""; // unbind fishing npc end; } diff --git a/npc/functions/gender.txt b/npc/functions/gender.txt new file mode 100644 index 00000000..0f153c53 --- /dev/null +++ b/npc/functions/gender.txt @@ -0,0 +1,13 @@ +function script stringToGender { + .@short$ = strtolower(charat(getarg(0, ""), 0)); + + return .@short$ == "f" ? GENDER_FEMALE : + .@short$ == "m" ? GENDER_MALE : GENDER_HIDDEN; +} + +function script genderToString { + .@gender = getarg(0, Gender); + + return .@gender == GENDER_FEMALE ? l("female") : + .@gender == GENDER_MALE ? l("male") : l("non-binary"); +} diff --git a/npc/functions/global_event_handler.txt b/npc/functions/global_event_handler.txt new file mode 100644 index 00000000..c66637ef --- /dev/null +++ b/npc/functions/global_event_handler.txt @@ -0,0 +1,65 @@ +// The Mana World scripts. +// Author: +// The Mana World Team +// Description: +// Controls most, if not all, global events on this server. +// Please only use callfunc("") here; This script is loaded +// early on and direct function assignment will cause fails. +// TODO: Move "new quest" notification here. (Or deprecate) + +// Helper function for scripted Monster Kills. +function script fix_mobkill { + killedrid=getarg(0); + doevent "#GlobalHandler::OnNPCKillEvent"; + return; +} + +- script #GlobalHandler NPC_HIDDEN,{ + end; + + +OnPCLoginEvent: + callfunc("updateSpotlight"); + callfunc("ReceiveMOTD"); + callfunc("ReceiveScheduledBroadcast"); + callfunc("FixBankVault"); + callfunc("GrantSuperSkill"); + end; + +OnPCLogoutEvent: + callfunc("UnequipCookie"); + callfunc("MundaneLogout"); + callfunc("fishing_cleanup", @fishing_spot$); + + // Variable cleanup + @fishing_spot$ = ""; + end; + +OnPCDieEvent: + callfunc("ForcedUnmount"); + callfunc("MundaneDeath"); + end; + +OnPCBaseLvUpEvent: + //callfunc("newquestwarning"); + end; + +OnNPCKillEvent: + $MONSTERS_KILLED+=1; + MONSTERS_KILLED+=1; + callfunc("EnoraKills"); + if ($MONSTERS_KILLED % 1000000 == 0) + callfunc("GetBeanieCopter"); + end; + +OnPCKillEvent: + $PLAYERS_KILLED+=1; + PLAYERS_KILLED+=1; + end; + +OnSkillInvoke: + callfunc("SkillInvoked"); + end; + +} + diff --git a/npc/functions/quest-debug/006-ShipQuests_ArpanMoney.txt b/npc/functions/quest-debug/006-ShipQuests_ArpanMoney.txt index 00e2fbea..0f77c1b9 100644 --- a/npc/functions/quest-debug/006-ShipQuests_ArpanMoney.txt +++ b/npc/functions/quest-debug/006-ShipQuests_ArpanMoney.txt @@ -15,7 +15,8 @@ function script QuestDebug6 { GenericQuestDebug ShipQuests_ArpanMoney, l("Does not have the quest"), 0, l("Elmo told about money"), 1, - l("Arpan gave money"), 2; + l("Arpan gave money"), 2, + l("Arpan gave clothes"), 3; if (@menuret < 0) { diff --git a/npc/functions/scoreboards.txt b/npc/functions/scoreboards.txt new file mode 100644 index 00000000..0dd54b23 --- /dev/null +++ b/npc/functions/scoreboards.txt @@ -0,0 +1,218 @@ +// Moubootaur Legends Script +// Author: +// Jesusalva +// Description: +// Leaderboards + +// Scoreboard functions +function script HallOfGuild { + mes ""; + mes l("##BHall Of Guild Level: TOP5##b"); + mesf("1. %s (%d)", $@hoguild_name$[0], $@hoguild_value[0]); + mesf("2. %s (%d)", $@hoguild_name$[1], $@hoguild_value[1]); + mesf("3. %s (%d)", $@hoguild_name$[2], $@hoguild_value[2]); + mesf("4. %s (%d)", $@hoguild_name$[3], $@hoguild_value[3]); + mesf("5. %s (%d)", $@hoguild_name$[4], $@hoguild_value[4]); + return; +} + +function script HallOfFortune { + mes ""; + mes l("##BHall Of Fortune: TOP15##b"); + mesf("1. %s (%s E)", $@hofortune_name$[0],format_number($@hofortune_value[0])); + mesf("2. %s (%s E)", $@hofortune_name$[1],format_number($@hofortune_value[1])); + mesf("3. %s (%s E)", $@hofortune_name$[2],format_number($@hofortune_value[2])); + mesf("4. %s (%s E)", $@hofortune_name$[3],format_number($@hofortune_value[3])); + mesf("5. %s (%s E)", $@hofortune_name$[4],format_number($@hofortune_value[4])); + mesf("6. %s (%s E)", $@hofortune_name$[5],format_number($@hofortune_value[5])); + mesf("7. %s (%s E)", $@hofortune_name$[6],format_number($@hofortune_value[6])); + mesf("8. %s (%s E)", $@hofortune_name$[7],format_number($@hofortune_value[7])); + mesf("9. %s (%s E)", $@hofortune_name$[8],format_number($@hofortune_value[8])); + mesf("10. %s (%s E)", $@hofortune_name$[9],format_number($@hofortune_value[9])); + mesf("11. %s (%s E)", $@hofortune_name$[10],format_number($@hofortune_value[10])); + mesf("12. %s (%s E)", $@hofortune_name$[11],format_number($@hofortune_value[11])); + mesf("13. %s (%s E)", $@hofortune_name$[12],format_number($@hofortune_value[12])); + mesf("14. %s (%s E)", $@hofortune_name$[13],format_number($@hofortune_value[13])); + mesf("15. %s (%s E)", $@hofortune_name$[14],format_number($@hofortune_value[14])); + return; +} + +function script HallOfLevel { + mes ""; + mes l("##BHall Of Level: TOP15##b"); + mesf("1. %s (%d)", $@hoblvl_name$[0], $@hoblvl_value[0]); + mesf("2. %s (%d)", $@hoblvl_name$[1], $@hoblvl_value[1]); + mesf("3. %s (%d)", $@hoblvl_name$[2], $@hoblvl_value[2]); + mesf("4. %s (%d)", $@hoblvl_name$[3], $@hoblvl_value[3]); + mesf("5. %s (%d)", $@hoblvl_name$[4], $@hoblvl_value[4]); + mesf("6. %s (%d)", $@hoblvl_name$[5], $@hoblvl_value[5]); + mesf("7. %s (%d)", $@hoblvl_name$[6], $@hoblvl_value[6]); + mesf("8. %s (%d)", $@hoblvl_name$[7], $@hoblvl_value[7]); + mesf("9. %s (%d)", $@hoblvl_name$[8], $@hoblvl_value[8]); + mesf("10. %s (%d)", $@hoblvl_name$[9], $@hoblvl_value[9]); + mesf("11. %s (%d)", $@hoblvl_name$[10], $@hoblvl_value[10]); + mesf("12. %s (%d)", $@hoblvl_name$[11], $@hoblvl_value[11]); + mesf("13. %s (%d)", $@hoblvl_name$[12], $@hoblvl_value[12]); + mesf("14. %s (%d)", $@hoblvl_name$[13], $@hoblvl_value[13]); + mesf("15. %s (%d)", $@hoblvl_name$[14], $@hoblvl_value[14]); + return; +} + +function script HallOfJob { + mes ""; + mes l("##BHall Of Job Level: TOP15##b"); + mesf("1. %s (%d)", $@hojlvl_name$[0], $@hojlvl_value[0]); + mesf("2. %s (%d)", $@hojlvl_name$[1], $@hojlvl_value[1]); + mesf("3. %s (%d)", $@hojlvl_name$[2], $@hojlvl_value[2]); + mesf("4. %s (%d)", $@hojlvl_name$[3], $@hojlvl_value[3]); + mesf("5. %s (%d)", $@hojlvl_name$[4], $@hojlvl_value[4]); + mesf("6. %s (%d)", $@hojlvl_name$[5], $@hojlvl_value[5]); + mesf("7. %s (%d)", $@hojlvl_name$[6], $@hojlvl_value[6]); + mesf("8. %s (%d)", $@hojlvl_name$[7], $@hojlvl_value[7]); + mesf("9. %s (%d)", $@hojlvl_name$[8], $@hojlvl_value[8]); + mesf("10. %s (%d)", $@hojlvl_name$[9], $@hojlvl_value[9]); + mesf("11. %s (%d)", $@hojlvl_name$[10], $@hojlvl_value[10]); + mesf("12. %s (%d)", $@hojlvl_name$[11], $@hojlvl_value[11]); + mesf("13. %s (%d)", $@hojlvl_name$[12], $@hojlvl_value[12]); + mesf("14. %s (%d)", $@hojlvl_name$[13], $@hojlvl_value[13]); + mesf("15. %s (%d)", $@hojlvl_name$[14], $@hojlvl_value[14]); + return; +} + +function script HallOfAcorns { + mes ""; + mes l("##BHall Of Acorns: TOP15##b"); + mesc l("Only %s in storage will be counted.", getitemlink(Acorn)); + mesf("1. %s (%d)", $@hoa_name$[0], $@hoa_value[0]); + mesf("2. %s (%d)", $@hoa_name$[1], $@hoa_value[1]); + mesf("3. %s (%d)", $@hoa_name$[2], $@hoa_value[2]); + mesf("4. %s (%d)", $@hoa_name$[3], $@hoa_value[3]); + mesf("5. %s (%d)", $@hoa_name$[4], $@hoa_value[4]); + mesf("6. %s (%d)", $@hoa_name$[5], $@hoa_value[5]); + mesf("7. %s (%d)", $@hoa_name$[6], $@hoa_value[6]); + mesf("8. %s (%d)", $@hoa_name$[7], $@hoa_value[7]); + mesf("9. %s (%d)", $@hoa_name$[8], $@hoa_value[8]); + mesf("10. %s (%d)", $@hoa_name$[9], $@hoa_value[9]); + mesf("11. %s (%d)", $@hoa_name$[10], $@hoa_value[10]); + mesf("12. %s (%d)", $@hoa_name$[11], $@hoa_value[11]); + mesf("13. %s (%d)", $@hoa_name$[12], $@hoa_value[12]); + mesf("14. %s (%d)", $@hoa_name$[13], $@hoa_value[13]); + mesf("15. %s (%d)", $@hoa_name$[14], $@hoa_value[14]); + return; +} + +// HallOfGame() +function script HallOfGame { + if ($MOST_HEROIC$) + mes l("World hero: %s", $MOST_HEROIC$); + + if ($TREE_PLANTED) + mes l("Planted Trees: %s", format_number($TREE_PLANTED)); // FIXME + + mes l("Players Killed in PvP: %s", format_number($PLAYERS_KILLED)); + mes l("Monsters Killed in PvE: %s", format_number($MONSTERS_KILLED)); + mes ""; + .@s$=(season_direction() == WINTER ? l("Winter") : .@s$); + .@s$=(season_direction() == AUTUMN ? l("Autumn") : .@s$); + .@s$=(season_direction() == SUMMER ? l("Summer") : .@s$); + .@s$=(season_direction() == SPRING ? l("Spring") : .@s$); + mes l("Current Season: %s", .@s$); + // weather ; game time ; world story ; etc. + mes ""; + mes l("Notable mentions and thanks for our [@@https://www.patreon.com/themanaworld|sponsors@@] for their continued support."); + mes ""; + return; +} + + +// Main script handler for scoreboards +- script @scoreboard NPC_HIDDEN,{ + end; +OnHour00: +OnHour01: +OnHour02: +OnHour03: +OnHour04: +OnHour05: +OnHour06: +OnHour07: +OnHour08: +OnHour09: +OnHour10: +OnHour11: +OnHour12: +OnHour13: +OnHour14: +OnHour15: +OnHour16: +OnHour17: +OnHour18: +OnHour19: +OnHour20: +OnHour21: +OnHour22: +OnHour23: +OnInit: + consolemes(CONSOLEMES_DEBUG, "Reloading scoreboards..."); + .@nb = query_sql("select name, zeny from `char` ORDER BY zeny DESC LIMIT 15", $@hofortune_name$, $@hofortune_value); + .@nb = query_sql("select name, base_level from `char` ORDER BY base_level DESC LIMIT 15", $@hoblvl_name$, $@hoblvl_value); + .@nb = query_sql("select name, job_level from `char` ORDER BY job_level DESC LIMIT 15", $@hojlvl_name$, $@hojlvl_value); + .@nb = query_sql("select name, guild_lv from `guild` ORDER BY guild_lv DESC LIMIT 5", $@hoguild_name$, $@hoguild_value); + .@nb = query_sql("SELECT c.name, i.amount FROM `storage` AS i, `char` AS c WHERE i.nameid="+Acorn+" AND i.account_id=c.account_id ORDER BY i.amount DESC LIMIT 15", $@hoa_name$, $@hoa_value); + consolemes(CONSOLEMES_DEBUG, "Scoreboards reloaded"); + if (!$@SCOREBOARD_BIND) { + bindatcmd "scoreboard", "@scoreboard::OnCall", 0, 100, 0; + bindatcmd "scoreboards", "@scoreboard::OnCall", 0, 100, 0; + $@SCOREBOARD_BIND=true; + } + end; + +OnCall: + do { + clear; + //HallOfSponsor(true); + mes l("The Mana World - rEvolt"); + mesc l("All scoreboards are updated hourly."), 1; + mes ""; + select + l("Hall Of Fortune"), + l("Hall Of Base Level"), + l("Hall Of Job Level"), + l("Hall Of Guilds"), + l("Hall Of Acorns"), + l("Game Statistics"), + l("Quit"); + mes ""; + switch (@menu) { + case 1: + HallOfFortune(); + next; + break; + case 2: + HallOfLevel(); + next; + break; + case 3: + HallOfJob(); + next; + break; + case 4: + HallOfGuild(); + next; + break; + case 5: + HallOfAcorns(); + next; + break; + case 6: + HallOfGame(); + next; + break; + default: + close; + } + } while (true); + end; +} + + diff --git a/npc/functions/skills.txt b/npc/functions/skills.txt new file mode 100644 index 00000000..568c97d9 --- /dev/null +++ b/npc/functions/skills.txt @@ -0,0 +1,13 @@ +// The Mana World scripts. +// Author: +// The Mana World Team +// Description: +// Controls script-based skills (which are rare); + +function script SkillInvoked { + // Record to database that you used the skill + skillInvoke[@skillId] = skillInvoke[@skillId] + 1; + + return; +} + diff --git a/npc/functions/spotlight.txt b/npc/functions/spotlight.txt index c4fb9c6b..fb0c697e 100644 --- a/npc/functions/spotlight.txt +++ b/npc/functions/spotlight.txt @@ -17,26 +17,17 @@ function script updateSpotlight { // It will be cast twice when switching caves. This sleep prevents obscure bugs. sleep2(80); - // Maps which this system - setarray .@mapz$, - "001-3-0", "001-3-1", "001-3-2", - "008-3-0", "008-3-1", "008-4-1"; - getmapxy(.@m$, .@x, .@y, 0); - //debugmes "Begin"; // Is your map valid (or is the check skipped) - /* if (!getarg(0,false)) { - if (array_find(.@mapz$, .@m$) < 0) + if (strpos(getmapname(), "-3-") < 0) return; } - */ // Retrieve default map masks .@ms=getmapmask(.@m$); - //debugmes "Default: %d", .@ms; // Which equipments provide bonuses? setarray .@b_head, CandleHelmet; @@ -60,7 +51,6 @@ function script updateSpotlight { // Calculate and send new map mask .@ms=.@ms|(2**.@score); sendmapmask(.@ms); - //debugmes "Data sent: %d", .@ms; return; } @@ -68,7 +58,7 @@ function script updateSpotlight { // Every NPC will be duplicating this one 001-3-0,0,0,0 script #SpotlightMaster NPC_HIDDEN,0,0,{ OnTouch: - updateSpotlight(); + updateSpotlight(true); end; } @@ -97,6 +87,6 @@ OnTouch: // npc/008-3-1/_warps.txt 008-3-1,34,34,0 duplicate(#SpotlightMaster) #SPOT008-3-1_34_34 NPC_HIDDEN,2,2 -// npc/008-4-1/_warps.txt -008-4-1,175,18,0 duplicate(#SpotlightMaster) #SPOT008-4-1_175_18 NPC_HIDDEN,2,2 +// npc/008-3-2/_warps.txt +008-3-2,175,18,0 duplicate(#SpotlightMaster) #SPOT008-3-2_175_18 NPC_HIDDEN,2,2 diff --git a/npc/functions/util.txt b/npc/functions/util.txt index a8e157b2..8e263eb0 100644 --- a/npc/functions/util.txt +++ b/npc/functions/util.txt @@ -8,17 +8,19 @@ // season_direction({day, month}) // returns the direction that represents our current season (approximation) -// DOWN: Winter, 21/12 -// DOWNLEFT: Spring, 20/03 -// LEFT: Summer, 21/06 -// UPLEFT: Autumn, 22/09 +// Note: You may also use WINTER/SPRING/SUMMER/AUTUMN constants for scripts +// where the direction is not important, but the season is. (Readability) +// DOWN: Winter, 21/12 WINTER +// DOWNLEFT: Spring, 20/03 SPRING +// LEFT: Summer, 21/06 SUMMER +// UPLEFT: Autumn, 22/09 AUTUMN function script season_direction { - .@current_month = getarg(0, gettime(GETTIME_MONTH)); + .@current_month = getarg(1, gettime(GETTIME_MONTH)); if (.@current_month % 3 == 0) { - .@current_day = getarg(1, gettime(GETTIME_DAYOFMONTH)); + .@current_day = getarg(0, gettime(GETTIME_DAYOFMONTH)); switch (.@current_month) { @@ -36,7 +38,7 @@ function script season_direction { } // This is part of Jesusalva script toolkit to make his life easier when writing -// quests. Many of these are actually redudant functions. +// quests. Many of these are actually redundant functions. // Four different flavours of setq() to quickly preserve old values function script setq1 { @@ -63,14 +65,9 @@ function script setqtime { return; } -// Function to quickly disregard part of getmapxy(). -// If you use this function too much, you'll lose efficiency, and it'll be better -// to use getmapxy() normally to save to temporary variables. -// Can take one optional argument (unittype argument). +// Shortcut for getmapname() function script getmap { - if (getmapxy(.@mapName$, .@xpos, .@ypos, getarg(0,0)) != 0) - return false; - return .@mapName$; + return getmapname(); } // Returns the player race in plain text @@ -84,7 +81,7 @@ function script get_race { .@g=getarg(1, Class); // We also allow this to run without player attached for... science. - if (getarg(1,-1) >= 0) + if (playerattached()) { setarray .@allraces$, l("Human"), l("Ukar"), l("Kralog"), l("Raijin"), l("Kralog"), l("Raijin"), l("Tritan"), diff --git a/npc/items/cookie.txt b/npc/items/cookie.txt index 80ff591e..e451e844 100644 --- a/npc/items/cookie.txt +++ b/npc/items/cookie.txt @@ -5,13 +5,17 @@ // Description: // Prevents cookie from being used for too long +function script UnequipCookie { + if (getequipid(EQI_HEAD_MID) == DeliciousCookie) + unequip(EQI_HEAD_MID); + return; +} + - script #DeliciousCookie NPC_HIDDEN,{ end; -OnPCLogoutEvent: OnUnequip: - if (getequipid(EQI_HEAD_MID) == DeliciousCookie) - unequip(EQI_HEAD_MID); + UnequipCookie(); end; } diff --git a/npc/scripts.conf b/npc/scripts.conf index cd0878cf..205ace11 100644 --- a/npc/scripts.conf +++ b/npc/scripts.conf @@ -12,6 +12,7 @@ "npc/functions/RNGesus.txt", "npc/functions/math.txt", "npc/functions/warp.txt", +"npc/functions/gender.txt", // Misc functions "npc/functions/main.txt", @@ -20,6 +21,7 @@ "npc/functions/clientversion.txt", "npc/functions/doors.txt", "npc/functions/goodbye.txt", +"npc/functions/global_event_handler.txt", "npc/functions/hammocks.txt", "npc/functions/harbours.txt", "npc/functions/hello.txt", @@ -49,7 +51,9 @@ "npc/functions/util.txt", // May rely on custom functions and thus must be handled by last +"npc/functions/scoreboards.txt", "npc/functions/manhole.txt", +"npc/functions/skills.txt", // quest debug "npc/functions/quest-debug/functions.txt", @@ -113,6 +117,7 @@ "npc/commands/zeny.txt", "npc/commands/motd-debug-text.txt", "npc/commands/motd.txt", +"npc/commands/mobinfo.txt", "npc/commands/scheduled-broadcasts.txt", "npc/commands/rate-management.txt", "npc/commands/event.txt", @@ -123,6 +128,8 @@ "npc/commands/debug.txt", "npc/commands/super-menu.txt", "npc/commands/resync.txt", +"npc/commands/python.txt", +"npc/commands/gender.txt", // config script "npc/config/hairstyle_config.txt", diff --git a/npc/sec_pri/_import.txt b/npc/sec_pri/_import.txt new file mode 100644 index 00000000..e6c274dd --- /dev/null +++ b/npc/sec_pri/_import.txt @@ -0,0 +1,3 @@ +// Map sec_pri: Jail +// This file is generated automatically. All manually added changes will be removed when running the Converter. +"npc/sec_pri/redirect.txt", diff --git a/npc/sec_pri/redirect.txt b/npc/sec_pri/redirect.txt new file mode 100644 index 00000000..bd46b987 --- /dev/null +++ b/npc/sec_pri/redirect.txt @@ -0,0 +1,12 @@ +// The Mana World Script +// Author: +// Jesusalva +// Controls additional jail cells + +sec_pri,49,75,0 script #JailIntWarp NPC_HIDDEN,0,0,{ + end; + +OnTouch: + slide any(29, 33), 75; + end; +} diff --git a/npc/test/npc1.txt b/npc/test/npc1.txt index a75a0120..4754e4ed 100644 --- a/npc/test/npc1.txt +++ b/npc/test/npc1.txt @@ -704,10 +704,6 @@ OnWhisperGlobal: mes "cmd: " + @whispervar0$; close; -OnSkillInvoke: - skillInvoke[@skillId] = skillInvoke[@skillId] + 1; - end; - OnReadyCheck: consolemes(CONSOLEMES_DEBUG, "OnReadyCheck"); $@bgid1 = waitingroom2bg("testbg", 10, 10, "bgnpc1::OnLogout","bgnpc1:OnDie"); |