summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortoams <toams85@gmail.com>2020-05-02 19:15:44 +0200
committertoams <toams85@gmail.com>2020-05-02 19:15:44 +0200
commit194b3ddb785c1e9523649b2d32a1724d1c42a297 (patch)
tree75e828d9c739d1ec79dc16452d254e75db26509d
parent6fb3638bf7e9f1d1ad405352c28d064c9592083a (diff)
parenta8114b91595b8062f8ab374b359d892107942891 (diff)
downloadserverdata-194b3ddb785c1e9523649b2d32a1724d1c42a297.tar.gz
serverdata-194b3ddb785c1e9523649b2d32a1724d1c42a297.tar.bz2
serverdata-194b3ddb785c1e9523649b2d32a1724d1c42a297.tar.xz
serverdata-194b3ddb785c1e9523649b2d32a1724d1c42a297.zip
Merge branch 'master' into kfahr
-rw-r--r--.gitlab-ci.yml3
-rw-r--r--conf/atcommand.conf2
-rw-r--r--conf/groups.conf3
-rw-r--r--conf/map/battle/exp.conf4
-rw-r--r--conf/map/maps.conf12
-rw-r--r--db/constants.conf28
-rw-r--r--db/item_options.conf80
-rw-r--r--db/map_index.txt88
-rw-r--r--db/re/item_db.conf1438
-rw-r--r--db/re/job_db.conf10
-rw-r--r--db/re/mob_db.conf1007
-rw-r--r--db/re/mob_skill_db.conf190
-rw-r--r--db/re/mob_skill_db.txt74
-rw-r--r--db/re/skill_db.conf30
-rw-r--r--db/re/skill_tree.conf5
-rw-r--r--maps/re/008-1-1.mcachebin2015 -> 2022 bytes
-rw-r--r--maps/re/008-1-2.mcachebin0 -> 5336 bytes
-rw-r--r--maps/re/008-1.mcachebin6901 -> 6901 bytes
-rw-r--r--maps/re/008-3-0.mcachebin2603 -> 3386 bytes
-rw-r--r--maps/re/008-3-1.mcachebin192 -> 216 bytes
-rw-r--r--maps/re/008-3-2.mcache (renamed from maps/re/008-4-1.mcache)bin970 -> 970 bytes
-rw-r--r--maps/re/012-1.mcachebin0 -> 1393 bytes
-rw-r--r--maps/re/012-2-1.mcachebin0 -> 121 bytes
-rw-r--r--maps/re/012-2-2.mcachebin0 -> 99 bytes
-rw-r--r--maps/re/012-2-3.mcachebin0 -> 120 bytes
-rw-r--r--maps/re/012-2-4.mcachebin0 -> 143 bytes
-rw-r--r--maps/re/012-2-5.mcachebin0 -> 121 bytes
-rw-r--r--maps/re/012-2-6.mcachebin0 -> 111 bytes
-rw-r--r--maps/re/012-2-7.mcachebin0 -> 91 bytes
-rw-r--r--maps/re/sec_pri.mcachebin0 -> 133 bytes
-rw-r--r--npc/000-0/sailors.txt4
-rw-r--r--npc/000-2-0/julia.txt2
-rw-r--r--npc/000-2-1/arpan.txt26
-rw-r--r--npc/000-2-1/peter.txt1
-rw-r--r--npc/000-2-2/ratto.txt7
-rw-r--r--npc/000-2-3/elmo.txt2
-rw-r--r--npc/001-1/enora.txt8
-rw-r--r--npc/001-1/rowboathelper.txt10
-rw-r--r--npc/001-2-19/lloyd.txt9
-rw-r--r--npc/001-2-22/peter.txt1
-rw-r--r--npc/001-2-23/ratto.txt5
-rw-r--r--npc/001-2-32/_import.txt2
-rw-r--r--npc/001-2-32/_warps.txt2
-rw-r--r--npc/001-2-34/_import.txt2
-rw-r--r--npc/001-2-34/_warps.txt2
-rw-r--r--npc/001-2-34/samantha.txt4
-rw-r--r--npc/001-2-35/_import.txt3
-rw-r--r--npc/001-2-36/_import.txt2
-rw-r--r--npc/001-2-36/_warps.txt2
-rw-r--r--npc/001-2-36/hector.txt2
-rw-r--r--npc/001-2-37/_import.txt2
-rw-r--r--npc/001-2-37/_savepoints.txt2
-rw-r--r--npc/001-2-37/_warps.txt2
-rw-r--r--npc/001-2-38/_import.txt2
-rw-r--r--npc/001-2-38/_savepoints.txt2
-rw-r--r--npc/001-2-38/_warps.txt2
-rw-r--r--npc/001-2-39/_import.txt2
-rw-r--r--npc/001-2-39/_warps.txt2
-rw-r--r--npc/001-2-40/trozz.txt50
-rw-r--r--npc/001-2-41/edouard.txt13
-rw-r--r--npc/001-3-0/mundane.txt45
-rw-r--r--npc/008-1-1/_import.txt2
-rw-r--r--npc/008-1-1/_mobs.txt10
-rw-r--r--npc/008-1-1/_warps.txt1
-rw-r--r--npc/008-1-1/morcant.txt20
-rw-r--r--npc/008-1-1/sign.txt24
-rw-r--r--npc/008-1-2/_import.txt (renamed from npc/008-4-1/_import.txt)7
-rw-r--r--npc/008-1-2/_warps.txt4
-rw-r--r--npc/008-1-2/sign.txt34
-rw-r--r--npc/008-1/_import.txt1
-rw-r--r--npc/008-1/_warps.txt3
-rw-r--r--npc/008-1/milly.txt11
-rw-r--r--npc/008-1/sign.txt50
-rw-r--r--npc/008-2-32/_import.txt1
-rw-r--r--npc/008-2-32/thamas.txt20
-rw-r--r--npc/008-3-0/_mobs.txt77
-rw-r--r--npc/008-3-2/_import.txt4
-rw-r--r--npc/008-3-2/_mobs.txt7
-rw-r--r--npc/008-3-2/_warps.txt3
-rw-r--r--npc/008-3-2/boss.txt (renamed from npc/008-4-1/boss.txt)30
-rw-r--r--npc/008-4-1/_mobs.txt7
-rw-r--r--npc/012-1/_import.txt14
-rw-r--r--npc/012-1/_warps.txt8
-rw-r--r--npc/012-1/aahna.txt18
-rw-r--r--npc/012-1/aidan.txt18
-rw-r--r--npc/012-1/ayasha.txt18
-rw-r--r--npc/012-1/crasmande.txt18
-rw-r--r--npc/012-1/hasan.txt18
-rw-r--r--npc/012-1/ishi.txt18
-rw-r--r--npc/012-1/kaan.txt18
-rw-r--r--npc/012-1/liana.txt18
-rw-r--r--npc/012-1/prawors.txt18
-rw-r--r--npc/012-1/vincent.txt18
-rw-r--r--npc/012-1/zegas.txt18
-rw-r--r--npc/012-2-1/_import.txt5
-rw-r--r--npc/012-2-1/_warps.txt4
-rw-r--r--npc/012-2-1/jessie.txt18
-rw-r--r--npc/012-2-1/tanisha.txt18
-rw-r--r--npc/012-2-2/_import.txt5
-rw-r--r--npc/012-2-2/_savepoints.txt28
-rw-r--r--npc/012-2-2/_warps.txt (renamed from npc/008-4-1/_warps.txt)4
-rw-r--r--npc/012-2-2/sorfina.txt18
-rw-r--r--npc/012-2-3/_import.txt5
-rw-r--r--npc/012-2-3/_warps.txt (renamed from npc/001-2-35/_warps.txt)4
-rw-r--r--npc/012-2-3/cynric.txt18
-rw-r--r--npc/012-2-3/nyle.txt18
-rw-r--r--npc/012-2-4/_import.txt5
-rw-r--r--npc/012-2-4/_warps.txt3
-rw-r--r--npc/012-2-4/morgan.txt21
-rw-r--r--npc/012-2-4/zitoni.txt77
-rw-r--r--npc/012-2-5/_import.txt5
-rw-r--r--npc/012-2-5/_warps.txt3
-rw-r--r--npc/012-2-5/rosen.txt21
-rw-r--r--npc/012-2-5/toichi.txt21
-rw-r--r--npc/012-2-6/_import.txt3
-rw-r--r--npc/012-2-6/_warps.txt3
-rw-r--r--npc/012-2-7/_import.txt4
-rw-r--r--npc/012-2-7/_savepoints.txt15
-rw-r--r--npc/012-2-7/_warps.txt3
-rw-r--r--npc/_anchors.txt3
-rw-r--r--npc/_import.txt12
-rw-r--r--npc/commands/debug-look.txt29
-rw-r--r--npc/commands/gender.txt35
-rw-r--r--npc/commands/mobinfo.txt29
-rw-r--r--npc/commands/motd.txt17
-rw-r--r--npc/commands/python.txt24
-rw-r--r--npc/commands/scheduled-broadcasts.txt12
-rw-r--r--npc/commands/super-menu.txt16
-rw-r--r--npc/functions/barber.txt15
-rw-r--r--npc/functions/fishing.txt3
-rw-r--r--npc/functions/gender.txt13
-rw-r--r--npc/functions/global_event_handler.txt65
-rw-r--r--npc/functions/quest-debug/006-ShipQuests_ArpanMoney.txt3
-rw-r--r--npc/functions/scoreboards.txt218
-rw-r--r--npc/functions/skills.txt13
-rw-r--r--npc/functions/spotlight.txt18
-rw-r--r--npc/functions/util.txt27
-rw-r--r--npc/items/cookie.txt10
-rw-r--r--npc/scripts.conf7
-rw-r--r--npc/sec_pri/_import.txt3
-rw-r--r--npc/sec_pri/redirect.txt12
-rw-r--r--npc/test/npc1.txt4
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
index 5a8705a2..704869a3 100644
--- a/maps/re/008-1-1.mcache
+++ b/maps/re/008-1-1.mcache
Binary files differ
diff --git a/maps/re/008-1-2.mcache b/maps/re/008-1-2.mcache
new file mode 100644
index 00000000..7c9d08f7
--- /dev/null
+++ b/maps/re/008-1-2.mcache
Binary files differ
diff --git a/maps/re/008-1.mcache b/maps/re/008-1.mcache
index a819d56d..38c10582 100644
--- a/maps/re/008-1.mcache
+++ b/maps/re/008-1.mcache
Binary files differ
diff --git a/maps/re/008-3-0.mcache b/maps/re/008-3-0.mcache
index 5a291c6f..1dfb2b2b 100644
--- a/maps/re/008-3-0.mcache
+++ b/maps/re/008-3-0.mcache
Binary files differ
diff --git a/maps/re/008-3-1.mcache b/maps/re/008-3-1.mcache
index e34f7676..849c3f33 100644
--- a/maps/re/008-3-1.mcache
+++ b/maps/re/008-3-1.mcache
Binary files differ
diff --git a/maps/re/008-4-1.mcache b/maps/re/008-3-2.mcache
index c64a3c80..c64a3c80 100644
--- a/maps/re/008-4-1.mcache
+++ b/maps/re/008-3-2.mcache
Binary files differ
diff --git a/maps/re/012-1.mcache b/maps/re/012-1.mcache
new file mode 100644
index 00000000..2a30e443
--- /dev/null
+++ b/maps/re/012-1.mcache
Binary files differ
diff --git a/maps/re/012-2-1.mcache b/maps/re/012-2-1.mcache
new file mode 100644
index 00000000..6f602134
--- /dev/null
+++ b/maps/re/012-2-1.mcache
Binary files differ
diff --git a/maps/re/012-2-2.mcache b/maps/re/012-2-2.mcache
new file mode 100644
index 00000000..d8436dd3
--- /dev/null
+++ b/maps/re/012-2-2.mcache
Binary files differ
diff --git a/maps/re/012-2-3.mcache b/maps/re/012-2-3.mcache
new file mode 100644
index 00000000..c31a8f8c
--- /dev/null
+++ b/maps/re/012-2-3.mcache
Binary files differ
diff --git a/maps/re/012-2-4.mcache b/maps/re/012-2-4.mcache
new file mode 100644
index 00000000..2ac98ccd
--- /dev/null
+++ b/maps/re/012-2-4.mcache
Binary files differ
diff --git a/maps/re/012-2-5.mcache b/maps/re/012-2-5.mcache
new file mode 100644
index 00000000..4a9977a9
--- /dev/null
+++ b/maps/re/012-2-5.mcache
Binary files differ
diff --git a/maps/re/012-2-6.mcache b/maps/re/012-2-6.mcache
new file mode 100644
index 00000000..a868f507
--- /dev/null
+++ b/maps/re/012-2-6.mcache
Binary files differ
diff --git a/maps/re/012-2-7.mcache b/maps/re/012-2-7.mcache
new file mode 100644
index 00000000..7cfae81f
--- /dev/null
+++ b/maps/re/012-2-7.mcache
Binary files differ
diff --git a/maps/re/sec_pri.mcache b/maps/re/sec_pri.mcache
new file mode 100644
index 00000000..e51c52a8
--- /dev/null
+++ b/maps/re/sec_pri.mcache
Binary files differ
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");