summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJesusaves <cpntb1@ymail.com>2020-06-17 05:08:35 -0300
committerJesusaves <cpntb1@ymail.com>2020-06-17 05:08:35 -0300
commit654d54d42079e21ac0541cb1e5f28c08cc935d5d (patch)
treeced30475ba31099de02627b57fb264958193d70d
parent3cb4b0171536a04e177d823213a1aff51ab56f8d (diff)
parent4e242e64460a5548b77d512f317a8cd66967a95f (diff)
downloadserverdata-kfahr.tar.gz
serverdata-kfahr.tar.bz2
serverdata-kfahr.tar.xz
serverdata-kfahr.zip
Merge branch 'master' into kfahrkfahr
-rw-r--r--db/clans.conf60
-rw-r--r--db/constants.conf30
-rw-r--r--db/job_db2.txt46
-rw-r--r--db/re/attr_fix.txt28
-rw-r--r--db/re/item_db.conf26
-rw-r--r--db/re/job_db.conf44
-rw-r--r--db/re/skill_tree.conf22
-rw-r--r--npc/000-0/sailors.txt16
-rw-r--r--npc/001-1/sophialla.txt14
-rw-r--r--npc/001-2-32/doors.txt23
-rw-r--r--npc/001-2-32/serena.txt232
-rw-r--r--npc/001-2-34/doors.txt2
-rw-r--r--npc/001-2-34/samantha.txt38
-rw-r--r--npc/001-2-35/_import.txt1
-rw-r--r--npc/001-2-35/doors.txt19
-rw-r--r--npc/001-2-35/mapflags.txt1
-rw-r--r--npc/001-2-36/hector.txt1
-rw-r--r--npc/001-2-39/qanon.txt2
-rw-r--r--npc/001-2-41/edouard.txt2
-rw-r--r--npc/001-2-5/tutorial.txt8
-rw-r--r--npc/001-2-6/books.txt16
-rw-r--r--npc/001-2-9/janus.txt1
-rw-r--r--npc/001-3-0/mundane.txt4
-rw-r--r--npc/008-3-5/nunia.txt2
-rw-r--r--npc/012-1/aahna.txt6
-rw-r--r--npc/012-1/aidan.txt8
-rw-r--r--npc/012-1/ayasha.txt6
-rw-r--r--npc/012-1/crasmande.txt7
-rw-r--r--npc/012-1/hasan.txt7
-rw-r--r--npc/012-1/ishi.txt9
-rw-r--r--npc/012-1/kaan.txt8
-rw-r--r--npc/012-1/liana.txt16
-rw-r--r--npc/012-1/prawors.txt7
-rw-r--r--npc/012-1/vincent.txt7
-rw-r--r--npc/012-1/zegas.txt27
-rw-r--r--npc/012-2-1/jessie.txt17
-rw-r--r--npc/012-2-1/tanisha.txt5
-rw-r--r--npc/012-2-2/sorfina.txt23
-rw-r--r--npc/012-2-3/cynric.txt36
-rw-r--r--npc/012-2-3/nyle.txt58
-rw-r--r--npc/012-2-4/morgan.txt6
-rw-r--r--npc/012-2-4/zitoni.txt4
-rw-r--r--npc/012-2-5/rosen.txt2
-rw-r--r--npc/012-2-5/toichi.txt7
-rw-r--r--npc/commands/debug-look.txt16
-rw-r--r--npc/commands/gender.txt6
-rw-r--r--npc/functions/barber.txt42
-rw-r--r--npc/functions/gender.txt4
-rw-r--r--npc/functions/global_event_handler.txt2
-rw-r--r--npc/functions/main.txt47
-rw-r--r--npc/functions/scoreboards.txt22
-rw-r--r--npc/functions/util.txt36
52 files changed, 780 insertions, 299 deletions
diff --git a/db/clans.conf b/db/clans.conf
index 3167ce6b..0c73ca41 100644
--- a/db/clans.conf
+++ b/db/clans.conf
@@ -56,86 +56,82 @@ clans: (
**************************************************************************/
{
Id: 1
- Const: "SWORDCLAN"
- Name: "Sword Clan"
- Leader: "Raffam Oranpere"
- Map: "001-1"
+ Const: "FACTION_LEGION"
+ Name: "Legion of Aemil"
+ Leader: "Q'Anon"
+ Map: "001-2-39"
Buff: {
Icon: "SI_SWORDCLAN"
Script: <"
- bonus(bStr, 1);
+ bonus(bStr, 2);
bonus(bVit, 1);
bonus(bMaxHP, 30);
bonus(bMaxSP, 10);
">
}
- Allies: [
- "GOLDENMACECLAN",
+ Antagonists: [
+ "FACTION_BROTHERHOOD",
]
},
{
Id: 2
- Const: "ARCWANDCLAN"
- Name: "Arc Wand Clan"
- Leader: "Devon Aire"
+ Const: "FACTION_BROTHERHOOD"
+ Name: "Brotherhood of Argaes"
+ Leader: "Jonatas"
Map: "001-1"
Buff: {
Icon: "SI_ARCWANDCLAN"
Script: <"
- bonus(bInt, 1);
- bonus(bDex, 1);
+ bonus(bDex, 2);
+ bonus(bAgi, 1);
bonus(bMaxHP, 30);
bonus(bMaxSP, 10);
">
}
- Allies: [
- "GOLDENMACECLAN",
- ]
Antagonists: [
- "CROSSBOWCLAN",
+ "FACTION_LEGION",
]
},
{
Id: 3
- Const: "GOLDENMACECLAN"
- Name: "Golden Mace Clan"
- Leader: "Berman Aire"
+ Const: "FACTION_THIEF"
+ Name: "The Thieves"
+ Leader: "Tanveer"
Map: "001-1"
Buff: {
Icon: "SI_GOLDENMACECLAN"
Script: <"
- bonus(bInt, 1);
- bonus(bLuk, 1);
+ bonus(bLuk, 2);
+ bonus(bDex, 1);
bonus(bMaxHP, 30);
bonus(bMaxSP, 10);
">
}
Allies: [
- "SWORDCLAN",
- "ARCWANDCLAN",
- "CROSSBOWCLAN",
+ "FACTION_LEGION",
+ "FACTION_BROTHERHOOD",
+ ]
+ Antagonists: [
+ "FACTION_MAGES",
]
},
{
Id: 4
- Const: "CROSSBOWCLAN"
- Name: "Crossbow Clan"
- Leader: "Shaam Rumi"
+ Const: "FACTION_MAGES"
+ Name: "The Magic Guild"
+ Leader: "Hocus Pocus Fidibus"
Map: "001-1"
Buff: {
Icon: "SI_CROSSBOWCLAN"
Script: <"
- bonus(bDex, 1);
+ bonus(bInt, 2);
bonus(bAgi, 1);
bonus(bMaxHP, 30);
bonus(bMaxSP, 10);
">
}
- Allies: [
- "GOLDENMACECLAN",
- ]
Antagonists: [
- "ARCWANDCLAN",
+ "FACTION_THIEF",
]
},
)
diff --git a/db/constants.conf b/db/constants.conf
index 192fb7fa..59dce74b 100644
--- a/db/constants.conf
+++ b/db/constants.conf
@@ -3912,17 +3912,25 @@ constants_db: {
G_OTHER: 3
comment__: "races"
- Human: 0
- DarkUkar: 1
- FireKralog: 2
- LightRaijin: 3
- FrostKralog: 4
- DarkRaijin: 5
- BlueTritan: 6
- MediumHuman: 7
- DarkHuman: 8
- PurpleTritan: 9
- PinkUkar: 10
+ KaizeiViro: 0
+ ArgaesViro: 1
+ TonoriViro: 2
+ CaveUkar: 3
+ MountainUkar: 4
+ SeaTritan: 5
+ LakeTritan: 6
+ LightRaijin: 7
+ DarkRaijin: 8
+ FireKralog: 9
+ FrostKralog: 10
+
+ // DEPRECATED: Kept for compatibility
+ Human: 0
+ Viro: 0
+ Ukar: 3
+ Tritan: 5
+ Raijin: 7
+ Kralog: 9
comment__: "getraceflags"
GETRACE_RACE: 0
diff --git a/db/job_db2.txt b/db/job_db2.txt
index a8d71ed4..cd75322e 100644
--- a/db/job_db2.txt
+++ b/db/job_db2.txt
@@ -16,39 +16,39 @@
//
// .:: HUMANS ::.
-// Kaizei Human
+// Kaizei Viro
0,0,0,0,0,3,0,0,0,0,2,0,0,0,0,1,0,0,0,0,4,0,0,0,0,5,0,0,0,0,6,0,0,0,0,2,0,0,0,0,1,0,0,0,0,5,0,0,0,0,4,0,0,0,0,3,0,0,0,0,2,0,0,0,0,1,0,0,0,0,4,0,0,0,0,5,0,0,0,0,6,0,0,0,0,2,0,0,0,0,1
-// Argaes Human
-0,0,0,0,0,3,0,0,0,0,2,0,0,0,0,1,0,0,0,0,4,0,0,0,0,5,0,0,0,0,6,0,0,0,0,2,0,0,0,0,1,0,0,0,0,5,0,0,0,0,4,0,0,0,0,3,0,0,0,0,2,0,0,0,0,1,0,0,0,0,4,0,0,0,0,5,0,0,0,0,6,0,0,0,0,2,0,0,0,0,1
-// Tonori Human
-0,0,0,0,0,3,0,0,0,0,2,0,0,0,0,1,0,0,0,0,4,0,0,0,0,5,0,0,0,0,6,0,0,0,0,2,0,0,0,0,1,0,0,0,0,5,0,0,0,0,4,0,0,0,0,3,0,0,0,0,2,0,0,0,0,1,0,0,0,0,4,0,0,0,0,5,0,0,0,0,6,0,0,0,0,2,0,0,0,0,1
-
-
-// .:: RAIJINS ::.
-// Light Raijin
-3,0,0,0,0,4,0,0,0,0,5,0,0,0,0,2,0,0,0,0,4,0,0,0,0,6,0,0,0,0,2,0,0,0,0,4,0,0,0,0,5,0,0,0,0,6,0,0,0,0,4,0,0,0,0,4,0,0,0,0,5,0,0,0,0,2,0,0,0,0,4,0,0,0,0,6,0,0,0,0,2,0,0,0,0,4,0,0,0,0,5
-// Dark Raijin
-5,0,0,0,0,4,0,0,0,0,5,0,0,0,0,2,0,0,0,0,4,0,0,0,0,6,0,0,0,0,2,0,0,0,0,4,0,0,0,0,5,0,0,0,0,6,0,0,0,0,4,0,0,0,0,4,0,0,0,0,5,0,0,0,0,2,0,0,0,0,4,0,0,0,0,6,0,0,0,0,2,0,0,0,0,4,0,0,0,0,5
-
-
-// .:: KRALOGS ::.
-// Fire Kralog
-2,0,0,0,0,1,0,0,0,0,6,0,0,0,0,3,0,0,0,0,5,0,0,0,0,1,0,0,0,0,3,0,0,0,0,2,0,0,0,0,1,0,0,0,0,6,0,0,0,0,4,0,0,0,0,1,0,0,0,0,6,0,0,0,0,3,0,0,0,0,5,0,0,0,0,1,0,0,0,0,3,0,0,0,0,2,0,0,0,0,1
-// Frost Kralog
-4,0,0,0,0,1,0,0,0,0,6,0,0,0,0,3,0,0,0,0,5,0,0,0,0,1,0,0,0,0,3,0,0,0,0,2,0,0,0,0,1,0,0,0,0,6,0,0,0,0,4,0,0,0,0,1,0,0,0,0,6,0,0,0,0,3,0,0,0,0,5,0,0,0,0,1,0,0,0,0,3,0,0,0,0,2,0,0,0,0,1
+// Argaes Viro
+1,0,0,0,0,3,0,0,0,0,2,0,0,0,0,1,0,0,0,0,4,0,0,0,0,5,0,0,0,0,6,0,0,0,0,2,0,0,0,0,1,0,0,0,0,5,0,0,0,0,4,0,0,0,0,3,0,0,0,0,2,0,0,0,0,1,0,0,0,0,4,0,0,0,0,5,0,0,0,0,6,0,0,0,0,2,0,0,0,0,1
+// Tonori Viro
+2,0,0,0,0,3,0,0,0,0,2,0,0,0,0,1,0,0,0,0,4,0,0,0,0,5,0,0,0,0,6,0,0,0,0,2,0,0,0,0,1,0,0,0,0,5,0,0,0,0,4,0,0,0,0,3,0,0,0,0,2,0,0,0,0,1,0,0,0,0,4,0,0,0,0,5,0,0,0,0,6,0,0,0,0,2,0,0,0,0,1
// .:: UKARS ::.
// Cave Ukar
-1,0,0,0,0,3,0,0,0,0,1,0,0,0,0,2,0,0,0,0,3,0,0,0,0,5,0,0,0,0,6,0,0,0,0,1,0,0,0,0,3,0,0,0,0,5,0,0,0,0,2,0,0,0,0,3,0,0,0,0,1,0,0,0,0,2,0,0,0,0,3,0,0,0,0,5,0,0,0,0,6,0,0,0,0,1,0,0,0,0,3
+3,0,0,0,0,3,0,0,0,0,1,0,0,0,0,2,0,0,0,0,3,0,0,0,0,5,0,0,0,0,6,0,0,0,0,1,0,0,0,0,3,0,0,0,0,5,0,0,0,0,2,0,0,0,0,3,0,0,0,0,1,0,0,0,0,2,0,0,0,0,3,0,0,0,0,5,0,0,0,0,6,0,0,0,0,1,0,0,0,0,3
// Mountain Ukar
-10,0,0,0,0,3,0,0,0,0,1,0,0,0,0,2,0,0,0,0,3,0,0,0,0,5,0,0,0,0,6,0,0,0,0,1,0,0,0,0,3,0,0,0,0,5,0,0,0,0,2,0,0,0,0,3,0,0,0,0,1,0,0,0,0,2,0,0,0,0,3,0,0,0,0,5,0,0,0,0,6,0,0,0,0,1,0,0,0,0,3
+4,0,0,0,0,3,0,0,0,0,1,0,0,0,0,2,0,0,0,0,3,0,0,0,0,5,0,0,0,0,6,0,0,0,0,1,0,0,0,0,3,0,0,0,0,5,0,0,0,0,2,0,0,0,0,3,0,0,0,0,1,0,0,0,0,2,0,0,0,0,3,0,0,0,0,5,0,0,0,0,6,0,0,0,0,1,0,0,0,0,3
// .:: TRITANS ::.
// Sea Tritan
-6,0,0,0,0,2,0,0,0,0,5,0,0,0,0,4,0,0,0,0,6,0,0,0,0,3,0,0,0,0,5,0,0,0,0,2,0,0,0,0,4,0,0,0,0,2,0,0,0,0,1,0,0,0,0,2,0,0,0,0,5,0,0,0,0,4,0,0,0,0,6,0,0,0,0,3,0,0,0,0,5,0,0,0,0,2,0,0,0,0,4,0,0,0,0,2,0,0,0,0,1
+5,0,0,0,0,2,0,0,0,0,5,0,0,0,0,4,0,0,0,0,6,0,0,0,0,3,0,0,0,0,5,0,0,0,0,2,0,0,0,0,4,0,0,0,0,2,0,0,0,0,1,0,0,0,0,2,0,0,0,0,5,0,0,0,0,4,0,0,0,0,6,0,0,0,0,3,0,0,0,0,5,0,0,0,0,2,0,0,0,0,4,0,0,0,0,2,0,0,0,0,1
// Lake Tritan
-9,0,0,0,0,2,0,0,0,0,5,0,0,0,0,4,0,0,0,0,6,0,0,0,0,3,0,0,0,0,5,0,0,0,0,2,0,0,0,0,4,0,0,0,0,2,0,0,0,0,1,0,0,0,0,2,0,0,0,0,5,0,0,0,0,4,0,0,0,0,6,0,0,0,0,3,0,0,0,0,5,0,0,0,0,2,0,0,0,0,4,0,0,0,0,2,0,0,0,0,1
+6,0,0,0,0,2,0,0,0,0,5,0,0,0,0,4,0,0,0,0,6,0,0,0,0,3,0,0,0,0,5,0,0,0,0,2,0,0,0,0,4,0,0,0,0,2,0,0,0,0,1,0,0,0,0,2,0,0,0,0,5,0,0,0,0,4,0,0,0,0,6,0,0,0,0,3,0,0,0,0,5,0,0,0,0,2,0,0,0,0,4,0,0,0,0,2,0,0,0,0,1
+
+
+
+// .:: RAIJINS ::.
+// Light Raijin
+7,0,0,0,0,4,0,0,0,0,5,0,0,0,0,2,0,0,0,0,4,0,0,0,0,6,0,0,0,0,2,0,0,0,0,4,0,0,0,0,5,0,0,0,0,6,0,0,0,0,4,0,0,0,0,4,0,0,0,0,5,0,0,0,0,2,0,0,0,0,4,0,0,0,0,6,0,0,0,0,2,0,0,0,0,4,0,0,0,0,5
+// Dark Raijin
+8,0,0,0,0,4,0,0,0,0,5,0,0,0,0,2,0,0,0,0,4,0,0,0,0,6,0,0,0,0,2,0,0,0,0,4,0,0,0,0,5,0,0,0,0,6,0,0,0,0,4,0,0,0,0,4,0,0,0,0,5,0,0,0,0,2,0,0,0,0,4,0,0,0,0,6,0,0,0,0,2,0,0,0,0,4,0,0,0,0,5
+
+// .:: KRALOGS ::.
+// Fire Kralog
+9,0,0,0,0,1,0,0,0,0,6,0,0,0,0,3,0,0,0,0,5,0,0,0,0,1,0,0,0,0,3,0,0,0,0,2,0,0,0,0,1,0,0,0,0,6,0,0,0,0,4,0,0,0,0,1,0,0,0,0,6,0,0,0,0,3,0,0,0,0,5,0,0,0,0,1,0,0,0,0,3,0,0,0,0,2,0,0,0,0,1
+// Frost Kralog
+10,0,0,0,0,1,0,0,0,0,6,0,0,0,0,3,0,0,0,0,5,0,0,0,0,1,0,0,0,0,3,0,0,0,0,2,0,0,0,0,1,0,0,0,0,6,0,0,0,0,4,0,0,0,0,1,0,0,0,0,6,0,0,0,0,3,0,0,0,0,5,0,0,0,0,1,0,0,0,0,3,0,0,0,0,2,0,0,0,0,1
diff --git a/db/re/attr_fix.txt b/db/re/attr_fix.txt
index b79ff7fe..37e7bd44 100644
--- a/db/re/attr_fix.txt
+++ b/db/re/attr_fix.txt
@@ -1,14 +1,14 @@
// Elemental attribute damage adjustment tables
//
-// Row: target's defense element
-// Column: attacker's weapon element
+// Row: attacker's weapon element
+// Column: target's defense element
1,10 // lv1 Attribute table
//Neut Watr Natr Fire NYI NYI Holy Shdw NYI NYI
100, 100, 100, 100, 100, 100, 100, 100, 100, 100, // Neutral
- 100, 90, 120, 80, 100, 100, 100, 100, 100, 100, // Water
- 100, 80, 90, 120, 100, 100, 100, 100, 100, 100, // Nature
- 100, 120, 80, 90, 100, 100, 100, 100, 100, 100, // Fire
+ 100, 90, 80, 120, 100, 100, 100, 100, 100, 100, // Water
+ 100, 120, 90, 80, 100, 100, 100, 100, 100, 100, // Nature
+ 100, 80, 120, 90, 100, 100, 100, 100, 100, 100, // Fire
100, 100, 100, 100, 90, 100, 100, 100, 100, 100, // UNUSED
100, 100, 100, 100, 100, 90, 100, 100, 100, 100, // UNUSED
100, 100, 100, 100, 100, 100, 90, 120, 100, 100, // Holy
@@ -19,9 +19,9 @@
2,10 // lv2 Attribute table
//Neut Watr Natr Fire NYI NYI Holy Shdw NYI NYI
100, 100, 100, 100, 100, 100, 100, 100, 100, 100, // Neutral
- 100, 90, 130, 70, 100, 100, 100, 100, 100, 100, // Water
- 100, 70, 90, 130, 100, 100, 100, 100, 100, 100, // Nature
- 100, 130, 70, 90, 100, 100, 100, 100, 100, 100, // Fire
+ 100, 90, 70, 130, 100, 100, 100, 100, 100, 100, // Water
+ 100, 130, 90, 70, 100, 100, 100, 100, 100, 100, // Nature
+ 100, 70, 130, 90, 100, 100, 100, 100, 100, 100, // Fire
100, 100, 100, 100, 90, 100, 100, 100, 100, 100, // UNUSED
100, 100, 100, 100, 100, 90, 100, 100, 100, 100, // UNUSED
100, 100, 100, 100, 100, 100, 90, 130, 100, 100, // Holy
@@ -32,9 +32,9 @@
3,10 // lv3 Attribute table
//Neut Watr Natr Fire NYI NYI Holy Shdw NYI NYI
100, 100, 100, 100, 100, 100, 100, 100, 100, 100, // Neutral
- 100, 90, 140, 60, 100, 100, 100, 100, 100, 100, // Water
- 100, 60, 90, 140, 100, 100, 100, 100, 100, 100, // Nature
- 100, 140, 60, 90, 100, 100, 100, 100, 100, 100, // Fire
+ 100, 90, 60, 140, 100, 100, 100, 100, 100, 100, // Water
+ 100, 140, 90, 60, 100, 100, 100, 100, 100, 100, // Nature
+ 100, 60, 140, 90, 100, 100, 100, 100, 100, 100, // Fire
100, 100, 100, 100, 90, 100, 100, 100, 100, 100, // UNUSED
100, 100, 100, 100, 100, 90, 100, 100, 100, 100, // UNUSED
100, 100, 100, 100, 100, 100, 90, 140, 100, 100, // Holy
@@ -45,9 +45,9 @@
4,10 // lv4 Attribute table
//Neut Watr Natr Fire NYI NYI Holy Shdw NYI NYI
100, 100, 100, 100, 100, 100, 100, 100, 100, 100, // Neutral
- 100, 90, 150, 50, 100, 100, 100, 100, 100, 100, // Water
- 100, 50, 90, 150, 100, 100, 100, 100, 100, 100, // Nature
- 100, 150, 50, 90, 100, 100, 100, 100, 100, 100, // Fire
+ 100, 90, 50, 150, 100, 100, 100, 100, 100, 100, // Water
+ 100, 150, 90, 50, 100, 100, 100, 100, 100, 100, // Nature
+ 100, 50, 150, 90, 100, 100, 100, 100, 100, 100, // Fire
100, 100, 100, 100, 90, 100, 100, 100, 100, 100, // UNUSED
100, 100, 100, 100, 100, 90, 100, 100, 100, 100, // UNUSED
100, 100, 100, 100, 100, 100, 90, 150, 100, 100, // Holy
diff --git a/db/re/item_db.conf b/db/re/item_db.conf
index 5594ee93..b9537c14 100644
--- a/db/re/item_db.conf
+++ b/db/re/item_db.conf
@@ -1336,16 +1336,11 @@ item_db: (
},
{
Id: 714
- AegisName: "AquadaBox"
- Name: "Aquada Box"
+ AegisName: "GuildCertification"
+ Name: "Guild Certification"
Type: "IT_ETC"
- Buy: 2
- Sell: 1
- Weight: 850
- Trade: {
- nodrop: true
- noselltonpc: true
- }
+ Buy: 100000
+ Sell: 100
},
{
Id: 715
@@ -1504,11 +1499,16 @@ item_db: (
},
{
Id: 730
- AegisName: "GuildCertification"
- Name: "Guild Certification"
+ AegisName: "AquadaBox"
+ Name: "Aquada Box"
Type: "IT_ETC"
- Buy: 100000
- Sell: 100
+ Buy: 2
+ Sell: 1
+ Weight: 850
+ Trade: {
+ nodrop: true
+ noselltonpc: true
+ }
},
{
Id: 731
diff --git a/db/re/job_db.conf b/db/re/job_db.conf
index 02b4e16a..825ed1e4 100644
--- a/db/re/job_db.conf
+++ b/db/re/job_db.conf
@@ -51,10 +51,10 @@ Job_Name: { // Job names as in src/map/pc.c (they are hardcoded at the moment so
}
*/
//====================================================
-Human: {
+Viro: {
BaseExpGroup: "EvolClasses"
JobExpGroup: "EvolClasses"
- MoveSpeed: 170
+ MoveSpeed: 150
Weight: 20000
BaseASPD: {
Fist: 40
@@ -104,10 +104,10 @@ Human: {
1510, 1520, 1530, 1540, 1550, 1560, 1570, 1580, 1590, 160] // 151 - 160
}
-DarkUkar: {
+CaveUkar: {
BaseExpGroup: "EvolClasses"
JobExpGroup: "EvolClasses"
- MoveSpeed: 170
+ MoveSpeed: 150
Weight: 20000
BaseASPD: {
Fist: 40
@@ -159,7 +159,7 @@ DarkUkar: {
FireKralog: {
BaseExpGroup: "EvolClasses"
JobExpGroup: "EvolClasses"
- MoveSpeed: 170
+ MoveSpeed: 150
Weight: 20000
BaseASPD: {
Fist: 40
@@ -212,7 +212,7 @@ FireKralog: {
LightRaijin: {
BaseExpGroup: "EvolClasses"
JobExpGroup: "EvolClasses"
- MoveSpeed: 170
+ MoveSpeed: 150
Weight: 20000
BaseASPD: {
Fist: 40
@@ -262,10 +262,10 @@ LightRaijin: {
1510, 1520, 1530, 1540, 1550, 1560, 1570, 1580, 1590, 160] // 151 - 160
}
-BlueTritan: {
+SeaTritan: {
BaseExpGroup: "EvolClasses"
JobExpGroup: "EvolClasses"
- MoveSpeed: 170
+ MoveSpeed: 150
Weight: 20000
BaseASPD: {
Fist: 40
@@ -318,43 +318,43 @@ BlueTritan: {
FrostKralog: {
BaseExpGroup: "EvolClasses"
JobExpGroup: "EvolClasses"
- MoveSpeed: 170
+ MoveSpeed: 150
Inherit: ( "FireKralog" ); // Base job from which this job will inherit its max weight, base ASPD set and HP/SP table.
}
DarkRaijin: {
BaseExpGroup: "EvolClasses"
JobExpGroup: "EvolClasses"
- MoveSpeed: 170
+ MoveSpeed: 150
Inherit: ( "LightRaijin" ); // Base job from which this job will inherit its max weight, base ASPD set and HP/SP table.
}
-MediumHuman: {
+ArgaesViro: {
BaseExpGroup: "EvolClasses"
JobExpGroup: "EvolClasses"
- MoveSpeed: 170
- Inherit: ( "Human" );
+ MoveSpeed: 150
+ Inherit: ( "Viro" );
}
-DarkHuman: {
+TonoriViro: {
BaseExpGroup: "EvolClasses"
JobExpGroup: "EvolClasses"
- MoveSpeed: 170
- Inherit: ( "Human" );
+ MoveSpeed: 150
+ Inherit: ( "Viro" );
}
-PurpleTritan: {
+LakeTritan: {
BaseExpGroup: "EvolClasses"
JobExpGroup: "EvolClasses"
- MoveSpeed: 170
- Inherit: ( "BlueTritan" );
+ MoveSpeed: 150
+ Inherit: ( "SeaTritan" );
}
-PinkUkar: {
+MountainUkar: {
BaseExpGroup: "EvolClasses"
JobExpGroup: "EvolClasses"
- MoveSpeed: 170
- Inherit: ( "DarkUkar" );
+ MoveSpeed: 150
+ Inherit: ( "CaveUkar" );
}
diff --git a/db/re/skill_tree.conf b/db/re/skill_tree.conf
index f604479d..20a4dd64 100644
--- a/db/re/skill_tree.conf
+++ b/db/re/skill_tree.conf
@@ -25,7 +25,7 @@ Job_Name: { // Job names as in src/map/pc.c (they are hardcoded at the moment so
*/
//====================================================
-Human: {
+Viro: {
skills: {
SM_SWORD: 0
SM_TWOHAND: 0
@@ -89,7 +89,7 @@ Human: {
}
}
-DarkUkar: {
+CaveUkar: {
skills: {
SM_SWORD: 0
SM_TWOHAND: 0
@@ -281,7 +281,7 @@ LightRaijin: {
}
}
-BlueTritan: {
+SeaTritan: {
skills: {
SM_SWORD: 0
SM_TWOHAND: 0
@@ -354,19 +354,19 @@ DarkRaijin: {
inherit: ( "LightRaijin" );
}
-PurpleTritan: {
- inherit: ( "BlueTritan" );
+LakeTritan: {
+ inherit: ( "SeaTritan" );
}
-PinkUkar: {
- inherit: ( "DarkUkar" );
+MountainUkar: {
+ inherit: ( "CaveUkar" );
}
-MediumHuman: {
- inherit: ( "Human" );
+ArgaesViro: {
+ inherit: ( "Viro" );
}
-DarkHuman: {
- inherit: ( "Human" );
+TonoriViro: {
+ inherit: ( "Viro" );
}
diff --git a/npc/000-0/sailors.txt b/npc/000-0/sailors.txt
index 76870170..1e2fe739 100644
--- a/npc/000-0/sailors.txt
+++ b/npc/000-0/sailors.txt
@@ -34,7 +34,7 @@ OnTouch:
next;
setcamnpc "Sailors", 0, -32;
- mesn "Human Voice";
+ mesn "Viro Voice";
mesq lg("I think he's from the East...");
next;
@@ -53,6 +53,20 @@ OnTouch:
asklanguage(LANG_ON_SEA);
+ // TODO: This is gumi's code, I have no idea if it works or not
+ // Besides, is it lv 90, 95, 99, 100, or...?
+ // I believe Micksha said level 90 was plenty, but.
+ /*** FIXME ***
+ if ((LEGACY[1] & 0x7FFFFF00) >> 8) > 90)
+ REBIRTH=1;
+ *** FIXME ***/
+
+ // Players coming from TMW Legacy didn't got a chance to do this yet.
+ // So allow them now.
+ if (LEGACY) {
+ BarberChangeRace();
+ }
+
setcamnpc;
mes "";
mesn;
diff --git a/npc/001-1/sophialla.txt b/npc/001-1/sophialla.txt
index d2bb6760..0671307b 100644
--- a/npc/001-1/sophialla.txt
+++ b/npc/001-1/sophialla.txt
@@ -18,6 +18,7 @@
l("Hello."),
l("Can't you see I am reading? If you need something, tell me the secret password.");
// TODO: Use a token to know password or whatever
+ // PS. "Sagratha" is not a typo.
select
l("Sorry to disturb you."),
rif(getq(ArtisQuests_MonaDad) == 3, l("Sagratha is great.")),
@@ -31,6 +32,19 @@
l("Look for the hideout, but tell no one about this. Then, say the password again.");
compareandsetq General_Brotherhood, 1, 2;
}
+ else if (@menu == 3)
+ {
+ mesn;
+ mesq l("If I just told you, it would not be a password anymore, right?");
+ next;
+ mesn;
+ mesq l("I'm afraid you'll need to figure that out on your own.");
+ next;
+ mesn;
+ mesq l("This password is very secret. I don't think you would learn it even if you rescued someone missing for weeks."); // FIXME: Provide a decent hint.
+ next;
+ mesc l("%s sighs.", .name$);
+ }
speech
lg("If you don't know it, just go, please.");
diff --git a/npc/001-2-32/doors.txt b/npc/001-2-32/doors.txt
index ba33200f..828366d2 100644
--- a/npc/001-2-32/doors.txt
+++ b/npc/001-2-32/doors.txt
@@ -1,23 +1,38 @@
// Evol scripts.
// Author:
// Reid
+// Jesusalva
// Description:
// Doors NPCs.
001-2-32,33,29,0 script ToFightRoom#001-2-32 NPC_HIDDEN,0,0,{
OnTouch:
- if (mobcount("001-2-35","all") > 0)
+ if (getq(Artis_Legion_Progress) < 3)
{
narrator
l("You hear some sound behind the door."),
- l("Somebody is probably training, better wait for him to finish.");
+ l("Somebody is probably training, better wait for them to finish.");
}
else
{
- warp "001-2-35", 24, 29;
+ .@q2=getq2(Artis_Legion_Progress);
+ .@mapn$="atl2@"+getcharid(0);
+ // FIXME This code is extremely unreliable
+ if (isinstance(.@q2) && .@q2 >= 0)
+ {
+ instance_set_timeout(3600, 3600, .@q2);
+ warp .@mapn$, 24, 29;
+ } else {
+ .@inst = instance_create("ATL "+getcharid(0), getcharid(3), IOT_CHAR);
+ instance_attachmap("001-2-35", .@inst, false, .@mapn$);
+ // Instance lasts one hour
+ instance_set_timeout(3600, 3600, .@inst);
+ instance_init(.@inst);
+ setq2 Artis_Legion_Progress, .@inst;
+ }
+
}
- closeclientdialog;
close;
}
diff --git a/npc/001-2-32/serena.txt b/npc/001-2-32/serena.txt
index fa650ef1..8b8f92d4 100644
--- a/npc/001-2-32/serena.txt
+++ b/npc/001-2-32/serena.txt
@@ -1,50 +1,24 @@
-// Evol scripts.
+// The Mana World scripts.
// Author:
// Reid
+// Jesusalva
// Description:
// Artis's Legion of Aemil officier of the fighting room.
+// Note:
+// ATL - Artis Training Legion
001-2-32,27,27,0 script Serena NPC_SERENA,{
mesn;
mesq lg("Oh darling, what brought you here?"); // TRANSLATORS: Darling - Expresses familiarity or elderliness in relation to PC.
-
- // <scratch>
- // [ PC]: I was just looking around.
- // [NPC]: Did not someone offer guidance?
- // [NPC]: Enora was supposed to be helping you...
- // [NPC]: ...but, she is young, and often absent-minded; did you ask?
- // [NPC]: (Alt.) It seems you rushed ahead of her. Go back and talk to Enora.
- // ([Enora]: Beyond here is the fighting room o_o;)
- // ([Enora]: I... uh... well, you will need alies in there.)
- // ([Enora]: And... you see... this is my good outfit and...)
- // ([Enora]: ...I've only just cleaned up in there >.>)
- // But if you keep getting stronger; that will be the day.
-
- // Alt-Ready:
- // [NPC]: Beyond here is the Fight Room.
- // [NPC]: [conditions]*
- // [NPC]: Good-luck | Bonne-chance.
-
- // (Alt.) [NPC]: I used to be an adventurer, like you.
- // [NPC]: But there was no one to join for quests.
- // [NPC]: So I enlisted for a post at this chapter.
- // [NPC]: But my "friends" joined the Brotherhood!
-
- // [NPC]: The Brotherhood knows a lot more about monsters.
- // [NPC]: But they could not "break the Legion's power" without burning all cities to the ground.
- // [NPC]: The cities grow fast, ruining farmers and peasants.
- // [NPC]: Our differences lead to friction.
-
- // Alt-What
- // The secret is out: We really did create a mutant.
- // None of the members were informed until it went out-of-control.
- // [...]
- // Muahaha-ha! My beautiful mutant. The city of Artis is mine.
- // </scratch>
-
- // Alt-Siege
- // The city is being attacked. Go help the warriors and town-guard.
-
+ next;
+ select
+ l("I wanna fight."),
+ l("Nothing.");
+ mes "";
+ if (@menu == 1) {
+ mes l("Just walk right and talk to me. I'll be there in no time.");
+ mesc l("Challenge time limit: 60 minutes after entering the room.");
+ }
close;
OnInit:
@@ -53,3 +27,183 @@ OnInit:
end;
}
+001-2-35,26,27,0 script Serena#Ctrl NPC_SERENA,{
+ function checkVictory;
+
+ // We can't begin if we're already doing it
+ if (.atlf) {
+ // TODO: We should check if the timers are running
+ //doevent(instance_npcname(.name$)+"::OnVerify");
+ if (getq(Artis_Legion_Progress) == 4)
+ npctalk l("You're already done with the training, so feel free to leave.");
+ else
+ npctalk l("Focus on the fight!");
+ end;
+ }
+
+ // Otherwise, begin it
+ mesn;
+ mesq l("Are you ready for your training?");
+ next;
+ if (askyesno() == ASK_NO) {
+ mesn;
+ mesq l("Oh dear, please come back later then.");
+ close;
+ }
+ @ATLFIGHT=true;
+ // FALL THROUGH
+
+OnBegin:
+ mapannounce getmap(), l("Training Arena, %s, get ready!", strcharinfo(0)), bc_all;
+ // Save permanent data
+ .atl_blv=BaseLevel;
+ .atl_Str=readbattleparam(getcharid(3), UDT_STR);
+ .atl_Agi=readbattleparam(getcharid(3), UDT_AGI);
+ .atl_Vit=readbattleparam(getcharid(3), UDT_VIT);
+ .atl_Int=readbattleparam(getcharid(3), UDT_INT);
+ .atl_Dex=readbattleparam(getcharid(3), UDT_DEX);
+ .atl_Luk=readbattleparam(getcharid(3), UDT_LUK);
+ .atl_Dly=readbattleparam(getcharid(3), UDT_ADELAY);
+ .atl_Rng=readbattleparam(getcharid(3), UDT_ATKRANGE);
+
+ // Save (b)ase data
+ .atl_bhp=MaxHp;
+ .atl_bAtk1=readbattleparam(getcharid(3), UDT_ATKMIN);
+ .atl_bAtk2=readbattleparam(getcharid(3), UDT_ATKMAX);
+ .atl_bMatk=readbattleparam(getcharid(3), UDT_MATKMAX);
+ .atl_bDef=readbattleparam(getcharid(3), UDT_DEF);
+ .atl_bMdef=readbattleparam(getcharid(3), UDT_MDEF);
+ .atl_bHit=readbattleparam(getcharid(3), UDT_FLEE)*8/10;
+ .atl_bFlee=readbattleparam(getcharid(3), UDT_HIT)*7/10;
+ .atl_bCrit=readbattleparam(getcharid(3), UDT_CRIT);
+
+ // Save (p)rogression data
+ .atl_php=.atl_bhp/6;
+ .atl_pAtk1=.atl_bAtk1/12;
+ .atl_pAtk2=.atl_bAtk2/12;
+ .atl_pMatk=.atl_bMatk/5;
+ .atl_pDef=.atl_bDef/5;
+ .atl_pMdef=.atl_bMdef/5;
+ .atl_pHit=.atl_bFlee/10;
+ .atl_pFlee=.atl_bHit/15;
+ .atl_pCrit=.atl_bCrit/10;
+
+ // Begin the battle
+ doevent(instance_npcname(.name$)+"::OnGladius");
+ addtimer(5000, instance_npcname(.name$)+"::OnVerify");
+ closeclientdialog;
+ close;
+
+OnGladius:
+ sleep(800);
+ // TODO: Coordinates, Helpers?
+ .@mg=monster(instance_mapname("001-2-35"), any(25, 30, 35), any(29, 35, 40, 46), "Gladiator", any(LegionSwordswoman, LegionHalberdier, LegionLieutenant, LegionLieutenant), 1, instance_npcname(.name$)+"::OnGladius");
+
+ // Set "permanent" data
+ setunitdata(.@mg, UDT_ADELAY, .atl_Dly-.atlf);
+ setunitdata(.@mg, UDT_ATKRANGE, .atl_Rng+cap_value(.atlf/10, 0, 3));
+
+ // Set base data
+ setunitdata(.@mg, UDT_LEVEL, .atl_blv+.atlf);
+ setunitdata(.@mg, UDT_STR, .atl_Str+.atlf);
+ setunitdata(.@mg, UDT_AGI, .atl_Agi+.atlf);
+ setunitdata(.@mg, UDT_VIT, .atl_Vit+.atlf);
+ setunitdata(.@mg, UDT_INT, .atl_Int+.atlf);
+ setunitdata(.@mg, UDT_DEX, .atl_Dex+.atlf);
+ setunitdata(.@mg, UDT_LUK, .atl_Luk+.atlf);
+
+ // Set variable data
+ setunitdata(.@mg, UDT_MAXHP, .atl_bhp+.atl_php*(.atlf-1));
+ setunitdata(.@mg, UDT_HP, .atl_bhp+.atl_php*(.atlf-1));
+
+ setunitdata(.@mg, UDT_ATKMIN, .atl_bAtk1+.atl_pAtk1*(.atlf-1));
+ setunitdata(.@mg, UDT_ATKMAX, .atl_bAtk2+.atl_pAtk2*(.atlf-1));
+ setunitdata(.@mg, UDT_MATKMIN, .atl_bMatk+.atl_pMatk*(.atlf-1));
+ setunitdata(.@mg, UDT_MATKMAX, .atl_bMatk+.atl_pMatk*(.atlf-1));
+ setunitdata(.@mg, UDT_DEF, .atl_bDef+.atl_pDef*(.atlf-1));
+ setunitdata(.@mg, UDT_MDEF, .atl_Mdef+.atl_pMdef*(.atlf-1));
+ setunitdata(.@mg, UDT_HIT, .atl_bHit+.atl_pHit*(.atlf-1));
+ setunitdata(.@mg, UDT_FLEE, .atl_bFlee+.atl_pFlee*(.atlf-1));
+ setunitdata(.@mg, UDT_CRIT, .atl_bCrit+.atl_pCrit*(.atlf-1));
+
+ setunitdata(.@mg, UDT_PDODGE, min(30, .atl_Luk/10+(.atlf/3)));
+
+ .atlf+=1;
+ mapannounce instance_mapname("001-2-35"), ("Training Arena, wave " + .atlf + "!"), bc_all;
+ maptimer(instance_mapname("001-2-35"), 10, instance_npcname(.name$)+"::OnATLUpdate");
+ end;
+
+OnATLUpdate:
+ if (.atlf > ATLRANK)
+ ATLRANK=.atlf;
+ getexp .atlf*7, .atlf*5; // Provide some reward
+ end;
+
+// Check for possible cheats, and update default values
+OnVerify:
+ if (!.atlf)
+ end;
+
+ if (readbattleparam(getcharid(3), UDT_ATKRANGE) > .atl_Rng)
+ .atl_Rng=readbattleparam(getcharid(3), UDT_ATKRANGE);
+
+ if (readbattleparam(getcharid(3), UDT_ATKMAX) > .atl_bAtk1) {
+ .atl_bAtk1=readbattleparam(getcharid(3), UDT_ATKMIN);
+ .atl_bAtk2=readbattleparam(getcharid(3), UDT_ATKMAX);
+ .atl_pAtk1=.atl_bAtk1/10;
+ .atl_pAtk2=.atl_bAtk2/10;
+ }
+
+ if (readbattleparam(getcharid(3), UDT_DEF) > .atl_bDef) {
+ .atl_bDef=readbattleparam(getcharid(3), UDT_DEF);
+ .atl_pDef=.atl_bDef/5;
+ }
+
+ if (readbattleparam(getcharid(3), UDT_MDEF) > .atl_bMdef) {
+ .atl_bMdef=readbattleparam(getcharid(3), UDT_MDEF);
+ .atl_pMdef=.atl_bMdef/5;
+ }
+
+ if (readbattleparam(getcharid(3), UDT_MATKMAX) > .atl_bMatk) {
+ .atl_bMatk=readbattleparam(getcharid(3), UDT_MATKMAX);
+ .atl_pMatk=.atl_bMatk/5;
+ }
+
+ // TODO: Ignore haste potion effects
+ // TODO: Update battle statuses on the fly
+ if (readbattleparam(getcharid(3), UDT_ADELAY) < .atl_bDly)
+ .atl_bDly=readbattleparam(getcharid(3), UDT_DELAY);
+
+ // Victory conditions
+ if (getq(Artis_Legion_Progress) == 3)
+ checkVictory();
+
+ addtimer(5000, instance_npcname(.name$)+"::OnVerify");
+ end;
+
+ // Victory conditions
+ function checkVictory {
+ if (.atlf > 3) {
+ npctalk l("Congratulations, %s. I think this is enough. You can continue fighting to set a good score or report to Lozerk.", strcharinfo(0));
+ // Duplicate the dialog in case player miss it
+ dispbottom l("Congratulations, %s. I think this is enough. You can continue fighting to set a good score or report to Lozerk.", strcharinfo(0));
+ setq Artis_Legion_Progress, 4, 0;
+ }
+ return;
+ }
+
+}
+
+// Helper function for failure
+function script ATLFightEnd {
+ if (@ATLFIGHT) {
+ @ATLFIGHT=false;
+ .@mapn$="atl2@"+getcharid(0);
+ killmonster(.@mapn$, "all", false);
+ .@q2=getq2(Artis_Legion_Progress);
+ set(getvariableofnpc(.atlf, instance_npcname("Serena#Ctrl", .@q2)), 0);
+ }
+ return;
+}
+
+
diff --git a/npc/001-2-34/doors.txt b/npc/001-2-34/doors.txt
index e2ffee1f..6161dfa4 100644
--- a/npc/001-2-34/doors.txt
+++ b/npc/001-2-34/doors.txt
@@ -10,7 +10,7 @@
001-2-34,23,29,0 script ToTrainingRoom#001-2-34 NPC_HIDDEN,0,0,{
OnTouch:
- .@q2=getq2(ArtisQuests_TrainingLegion);
+ .@q2=getq2(ArtisQuests_TrainingLegion);
// Map name limit: 4 chars (atl1)
.@mapn$="atl1@"+getcharid(0);
if (isinstance(.@q2) && .@q2 > 0) {
diff --git a/npc/001-2-34/samantha.txt b/npc/001-2-34/samantha.txt
index a571ccf6..d7fe5c08 100644
--- a/npc/001-2-34/samantha.txt
+++ b/npc/001-2-34/samantha.txt
@@ -3,12 +3,50 @@
// Reid
// Description:
// Artis's Legion of Aemil officier of the training room.
+// Twin sister of Serena.
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?");
close;
+ // <scratch>
+ // [ PC]: I was just looking around.
+ // [NPC]: Did not someone offer guidance?
+ // [NPC]: Enora was supposed to be helping you...
+ // [NPC]: ...but, she is young, and often absent-minded; did you ask?
+ // [NPC]: (Alt.) It seems you rushed ahead of her. Go back and talk to Enora.
+ // ([Enora]: Beyond here is the fighting room o_o;)
+ // ([Enora]: I... uh... well, you will need alies in there.)
+ // ([Enora]: And... you see... this is my good outfit and...)
+ // ([Enora]: ...I've only just cleaned up in there >.>)
+ // But if you keep getting stronger; that will be the day.
+
+ // Alt-Ready:
+ // [NPC]: Beyond here is the Fight Room.
+ // [NPC]: [conditions]*
+ // [NPC]: Good-luck | Bonne-chance.
+
+ // (Alt.) [NPC]: I used to be an adventurer, like you.
+ // [NPC]: But there was no one to join for quests.
+ // [NPC]: So I enlisted for a post at this chapter.
+ // [NPC]: But my "friends" joined the Brotherhood!
+
+ // [NPC]: The Brotherhood knows a lot more about monsters.
+ // [NPC]: But they could not "break the Legion's power" without burning all cities to the ground.
+ // [NPC]: The cities grow fast, ruining farmers and peasants.
+ // [NPC]: Our differences lead to friction.
+
+ // Alt-What
+ // The secret is out: We really did create a mutant.
+ // None of the members were informed until it went out-of-control.
+ // [...]
+ // Muahaha-ha! My beautiful mutant. The city of Artis is mine.
+ // </scratch>
+
+ // Alt-Siege
+ // The city is being attacked. Go help the warriors and town-guard.
+
OnInit:
.sex = G_FEMALE;
.distance = 3;
diff --git a/npc/001-2-35/_import.txt b/npc/001-2-35/_import.txt
index 797b852a..fa2c779b 100644
--- a/npc/001-2-35/_import.txt
+++ b/npc/001-2-35/_import.txt
@@ -1,3 +1,4 @@
// 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/doors.txt",
"npc/001-2-35/mapflags.txt",
diff --git a/npc/001-2-35/doors.txt b/npc/001-2-35/doors.txt
new file mode 100644
index 00000000..64fcb30f
--- /dev/null
+++ b/npc/001-2-35/doors.txt
@@ -0,0 +1,19 @@
+// Evol scripts.
+// Author:
+// Jesusalva
+// Description:
+// Doors NPCs.
+
+001-2-35,23,29,0 script #001-2-35_23_29 NPC_HIDDEN,0,0,{
+ end;
+
+OnTouch:
+ if (getq(Artis_Legion_Progress) < 4) {
+ dispbottom l("I am not a coward. I shall not give up!");
+ end;
+ }
+ ATLFightEnd();
+ warp "001-2-32", 32, 29;
+ end;
+}
+
diff --git a/npc/001-2-35/mapflags.txt b/npc/001-2-35/mapflags.txt
index df3ed6a0..47166d55 100644
--- a/npc/001-2-35/mapflags.txt
+++ b/npc/001-2-35/mapflags.txt
@@ -1 +1,2 @@
001-2-35 mapflag town
+001-2-35 mapflag nowarpto
diff --git a/npc/001-2-36/hector.txt b/npc/001-2-36/hector.txt
index d25ca9e3..3b16ca10 100644
--- a/npc/001-2-36/hector.txt
+++ b/npc/001-2-36/hector.txt
@@ -449,6 +449,7 @@ OnInit:
.currentWaveLevel = 1;
.fightingActive = 0;
+ // TODO FIXME translation
// 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, Dummy; // an array of dummies, one for each training
diff --git a/npc/001-2-39/qanon.txt b/npc/001-2-39/qanon.txt
index 427a97ca..e2273850 100644
--- a/npc/001-2-39/qanon.txt
+++ b/npc/001-2-39/qanon.txt
@@ -85,7 +85,7 @@ function legionState {
// minor guilds: Merchants, Thieves and Mages.
// It would be the commands below:
- // join_clan(CLAN_LEGION);
+ // join_clan(FACTION_LEGION);
// clan_leave();
return;
}
diff --git a/npc/001-2-41/edouard.txt b/npc/001-2-41/edouard.txt
index 2a3fd4cc..40d53085 100644
--- a/npc/001-2-41/edouard.txt
+++ b/npc/001-2-41/edouard.txt
@@ -131,7 +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("How about changing my body type?"),
l("What's your story again?"),
l("I'm fine for now, thank you.");
diff --git a/npc/001-2-5/tutorial.txt b/npc/001-2-5/tutorial.txt
index 8576db0f..7d9b429f 100644
--- a/npc/001-2-5/tutorial.txt
+++ b/npc/001-2-5/tutorial.txt
@@ -243,12 +243,16 @@
OnShelfUse:
if (openbookshelf())
- read_book;
+ read_book();
close;
OnUse:
if (openbook())
- read_book;
+ read_book();
+ close;
+
+OnRemoteHelp:
+ read_book();
close;
OnInit:
diff --git a/npc/001-2-6/books.txt b/npc/001-2-6/books.txt
index 975a1809..280f3a08 100644
--- a/npc/001-2-6/books.txt
+++ b/npc/001-2-6/books.txt
@@ -151,7 +151,7 @@ OnInit:
narrator(S_FIRST_BLANK_LINE,
l("Aemil was once a magnificent land unknown to us all."),
l("Before the end of the Mana War, a band of adventurers formed in the Ancean region of Argaes from those who had lost their homes and families."),
- l("They sailed from Hurnscald to Tulimshar and then Nivalis, the last permanent settlements of humans."),
+ l("They sailed from Hurnscald to Tulimshar and then Nivalis, the last permanent settlements of viros."),
l("There, they gathered merchants and warriors to join them in a journey to find a new land on which to live."),
l("The group found the support of Tulimshar's merchant lords and was given ships to sail east."),
l("They sailed past the Clear Sea and towards the Long Ocean which nobody had explored before."),
@@ -218,10 +218,10 @@ OnInit:
l("World Story For Dummies, Vol I - Ancean Era: From Keshlam to an Empire"),
l("The collection of four books entitled “World Story For Dummies” is based on the uncessable work from the Ukar scholars, thanks to whom this wouldn't be possible."),
l("The “Ancean Era” is a term used to defined the time period between the beginning of recorded history and the events at the Mana Tree, and thanks to Ukar scholars, this is widely accepted as year 1 on all Gasaron."),
- l("The first human settlement to develop an advanced political structure and to become a city-state was Keshlam."),
+ l("The first viro settlement to develop an advanced political structure and to become a city-state was Keshlam."),
l("Keshlam expanded rapidly under the rule of King Janeb the Founder, and soon annexed the whole Ancea continent - excluding solely the Land Of Fire - to its domains, creating the Platinum Kingdom."),
l("Three cities developed on the eastern side of Ancea: Tulimshar, Hurnscald and Nivalis."),
- l("The Platinum Kingdom grew and prospered, and drew most of the human population to the safety of the walls of Keshlam, Tulimshar, Hurnscald and Nivalis."),
+ l("The Platinum Kingdom grew and prospered, and drew most of the viro population to the safety of the walls of Keshlam, Tulimshar, Hurnscald and Nivalis."),
l("-- Continues on Volume II --"));
}
@@ -252,7 +252,7 @@ OnInit:
l("World Story For Dummies, Vol II - Ancean Era: Revolutions and Independence"),
l("On the year 206CCE, after a long crisis of succession, a minor noble only known as Queen Platyna the Red came to inherit the Platinum Crown."),
l("Due to neglect with day-to-day administration, which she delegated to her council, and uncontrolled expenses, the kingdom faced its first economic crisis."),
- l("With the growth of the Kingdom halted, slow maintenance, and two great famines which killed over half the human population, the council decided to seize power and depose Platyna the Red."),
+ l("With the growth of the Kingdom halted, slow maintenance, and two great famines which killed over half the viro population, the council decided to seize power and depose Platyna the Red."),
l("On March 213CCE, Chancellor Benjamin Frost, with support of the council, proclaimed the Republic of Ancea. This event would become known as the Blue Revolution."),
l("Frost held the title of Lord Prince of the Republic for eighteen months, when the council deposed him and declared itself head of the state."),
l("The Republic of Ancea ceased to exist officially in August 216CCE, when the cities of Tulimshar, Hurnscald and Nivalis installed their own independent governments."),
@@ -287,15 +287,15 @@ OnInit:
narrator(S_FIRST_BLANK_LINE | S_NO_NPC_NAME,
l("World Story For Dummies, Vol III - Aemilean Era: The Mana Tree and The Mana War"),
l("Aemilean Era. Tulimshar, Hurnscald and Nivalis held power of their surrounding lands, except for the Land Of Fire and Keshlam City."),
- l("All races were in peace until the Humans set forth to discover the Source of Magic, based on Ukar scholars studies."),
+ l("All races were in peace until the Viros set forth to discover the Source of Magic, based on Ukar scholars studies."),
l("Free Mana travels in many directions, and this search took several years before the expedition finally found the right direction to follow."),
l("A large tree was found in a deep cave underneath the island of Candor. Despise the darkness of the cave and absence of leaves, the tree grew strong. It gave light off itself and its energy empowered the wizards."),
l("The tree was entitled The Mana Tree, and the Wizard Order took control over Candor Island. They learnt to control the mana flow, and limited its use, claiming Magic to be too dangerous for public use."),
l("This action was met with widespread opposition from all races, and a war broke. The tritans led the offensive, in attempts to keep the tree untouched and mana available for all."),
- l("Unable to win, the tritans attacked Hurnscald. While human troops moved in attempts to avoid its fall, the Kralog and Ukar joined the tritans and they took the city."),
+ l("Unable to win, the tritans attacked Hurnscald. While viro troops moved in attempts to avoid its fall, the Kralog and Ukar joined the tritans and they took the city."),
l("The next and final battle happened at Candor. Wizards attacks from both sides near the Mana Tree provoked a Mana Storm. A Great Quake shook the earth of Ancea and the land began to split. Geography changed, and Keshlan vanished from the map."),
l("The Mana Tree was lost, the caves entrances destroyed, and the Wizard Order was split in two: One part was on Candor, and other at the Magic Tower."),
- l("After this war, the Raijin race was born. A race born of Magic. Humans encapsulated in a Mana storm and altered forever."),
+ l("After this war, the Raijin race was born. A race born of Magic. Viros encapsulated in a Mana storm and altered forever."),
l("-- Continues on Volume IV --"));
}
@@ -325,7 +325,7 @@ OnInit:
narrator(S_FIRST_BLANK_LINE | S_NO_NPC_NAME,
l("World Story For Dummies, Vol IV - Aemilean Era: The Fleet of Ancea"),
l("After the Mana War, the Ancea continent was mostly destroyed. It would take years to nature start repairing the damage of the event."),
- l("A band of adventurers formed in Argaes from those who had lost their homes and families. They visited the three permanent human settlements: Tulimshar, Hurnscald and Nivalis."),
+ l("A band of adventurers formed in Argaes from those who had lost their homes and families. They visited the three permanent viro settlements: Tulimshar, Hurnscald and Nivalis."),
l("They gathered merchants and warriors to join them in a journey to find new lands to live in. Tulimshar's merchant lords gave them ships to sail east."),
l("The newly created Fleet of Ancea travelled so far that they were never heard from again. They found a continent, present on legends of explorers who never came back."),
l("They named this continent as Aemil, in honour of one of such explorers. The area they docked in was called Aurora, after its beautiful sunrise."),
diff --git a/npc/001-2-9/janus.txt b/npc/001-2-9/janus.txt
index 6d176615..2ff2d5ac 100644
--- a/npc/001-2-9/janus.txt
+++ b/npc/001-2-9/janus.txt
@@ -71,6 +71,7 @@
}
function explain_service {
+ // NOTE: "human" refers to all races in Gasaron, so usage is correct.
speech S_FIRST_BLANK_LINE | S_LAST_NEXT,
l("You are on the human resource wing of the Town Hall."),
l("We offer party and guild certifications and we can also teach you how to use some basic communication skills."),
diff --git a/npc/001-3-0/mundane.txt b/npc/001-3-0/mundane.txt
index 01cde3e8..2d03dbec 100644
--- a/npc/001-3-0/mundane.txt
+++ b/npc/001-3-0/mundane.txt
@@ -183,13 +183,13 @@ OnInstanceInit:
}
function script MundaneLogout {
- if (getq(ArtisQuests_MonaDad) != 2) end;
+ if (getq(ArtisQuests_MonaDad) != 2) return;
setq ArtisQuests_MonaDad, 1;
return;
}
function script MundaneDeath {
- if (getq(ArtisQuests_MonaDad) != 2) end;
+ if (getq(ArtisQuests_MonaDad) != 2) return;
setq ArtisQuests_MonaDad, 1;
dispbottom l("What a pity! You've died.");
diff --git a/npc/008-3-5/nunia.txt b/npc/008-3-5/nunia.txt
index f87a32d9..b2234dff 100644
--- a/npc/008-3-5/nunia.txt
+++ b/npc/008-3-5/nunia.txt
@@ -71,7 +71,7 @@ function nuniaBegin {
l("At least, you look peaceful. And I see by your fingers that you can deal with lockpicks."),
l("I am going to teach you all what a thief needs to know, later"),
l("Call for Micksha and Jesusalva to implement all this, please."),
- l("And Tezer, our president in Tulimshar, should be able to give you even more training.");
+ l("And Tanveer, our president in Tulimshar, should be able to give you even more training.");
return;
}
diff --git a/npc/012-1/aahna.txt b/npc/012-1/aahna.txt
index 12df0924..5e0aa294 100644
--- a/npc/012-1/aahna.txt
+++ b/npc/012-1/aahna.txt
@@ -3,16 +3,16 @@
// Micksha
// Description:
// Aahna, a low quality NPC ;)
-// THIS IS A PLACEHOLDER!
+// TODO: Ask for random drops from Mana Bugs (daily quest)
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");
+ l("I am looking at Mana Bugs. They always drop a bug leg, it is weird.");
close;
OnInit:
.sex = G_FEMALE;
- .distance = 2;
+ .distance = 4;
end;
}
diff --git a/npc/012-1/aidan.txt b/npc/012-1/aidan.txt
index 1ff47e45..b593127b 100644
--- a/npc/012-1/aidan.txt
+++ b/npc/012-1/aidan.txt
@@ -7,12 +7,14 @@
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");
+ l("Welcome. I am Aidan, from the Monster Hunting Association."),
+ l("We host daily and weekly monster hunting objectives to adventurers based on their level."),
+ l("We aren't open yet because Ishi still can't decide how she will hand out the rewards."),
+ l("But once we open, remember to come to me to sign in our tasks and also to claim rewards with Ishi before they expire!");
close;
OnInit:
.sex = G_MALE;
- .distance = 2;
+ .distance = 4;
end;
}
diff --git a/npc/012-1/ayasha.txt b/npc/012-1/ayasha.txt
index 623954f6..437b025f 100644
--- a/npc/012-1/ayasha.txt
+++ b/npc/012-1/ayasha.txt
@@ -7,12 +7,12 @@
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");
+ l("Hey adventurer!"),
+ l("I lost Liana, she was taking care of me; Have you seen her around? %%i");
close;
OnInit:
.sex = G_FEMALE;
- .distance = 2;
+ .distance = 4;
end;
}
diff --git a/npc/012-1/crasmande.txt b/npc/012-1/crasmande.txt
index 5aef9e89..54fcbe91 100644
--- a/npc/012-1/crasmande.txt
+++ b/npc/012-1/crasmande.txt
@@ -7,12 +7,13 @@
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");
+ l("I'm scared!"),
+ l("Hasan is bullying me!"),
+ l("%%i");
close;
OnInit:
.sex = G_MALE;
- .distance = 2;
+ .distance = 4;
end;
}
diff --git a/npc/012-1/hasan.txt b/npc/012-1/hasan.txt
index 52a53f18..06da9f5d 100644
--- a/npc/012-1/hasan.txt
+++ b/npc/012-1/hasan.txt
@@ -7,12 +7,13 @@
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");
+ l("Hey. I did nothing, I swear."),
+ l("Crasmande has been this way since I got here."),
+ lg("Don't you have more important business to attend to, anyway?");
close;
OnInit:
.sex = G_MALE;
- .distance = 2;
+ .distance = 4;
end;
}
diff --git a/npc/012-1/ishi.txt b/npc/012-1/ishi.txt
index c2390d4a..80119d6f 100644
--- a/npc/012-1/ishi.txt
+++ b/npc/012-1/ishi.txt
@@ -7,12 +7,15 @@
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");
+ l("Welcome. I am Ishi, from the Monster Hunting Association."),
+ l("I only follow Aidan around, so make your questions to him instead.");
+ next;
+ mesn;
+ mesc l("Ishi seems to be very pensative of something, it is better if we don't disturb her.");
close;
OnInit:
.sex = G_FEMALE;
- .distance = 2;
+ .distance = 4;
end;
}
diff --git a/npc/012-1/kaan.txt b/npc/012-1/kaan.txt
index 4ce8b3ab..f2a430fc 100644
--- a/npc/012-1/kaan.txt
+++ b/npc/012-1/kaan.txt
@@ -7,12 +7,14 @@
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");
+ l("Welcome to Candor!"),
+ l("Such a bright shine day! I would love to tell you stories about this town."),
+ l("But not now, I'm in the mood to stay under the sun for a while longer."),
+ l("I hope Tanisha is not slacking off. I would hate having to go check on her.");
close;
OnInit:
.sex = G_MALE;
- .distance = 2;
+ .distance = 4;
end;
}
diff --git a/npc/012-1/liana.txt b/npc/012-1/liana.txt
index e2d318be..391be79e 100644
--- a/npc/012-1/liana.txt
+++ b/npc/012-1/liana.txt
@@ -6,13 +6,21 @@
// 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");
+ mesn;
+ mesc l("*sighs*");
+ next;
+ mesn;
+ mesq l("Ayasha went to explore the caves in Candor. They said there was a pretty tree there.");
+ next;
+ mesn;
+ mesq l("...But then she saw the spiders and got scared.");
+ next;
+ mesn;
+ mesq l("Now she is crying looking for me. The poor kid.");
close;
OnInit:
.sex = G_FEMALE;
- .distance = 2;
+ .distance = 4;
end;
}
diff --git a/npc/012-1/prawors.txt b/npc/012-1/prawors.txt
index 3ee9159a..5a76c6f9 100644
--- a/npc/012-1/prawors.txt
+++ b/npc/012-1/prawors.txt
@@ -7,12 +7,13 @@
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");
+ l("Arrhoy!"),
+ l("Micksha still haven't added a ship here, so you're stranded here FOREVER!"),
+ l("I hope you enjoy this town! Meanwhile, I wonder where I put my %s...", getitemlink(TreasureMap));
close;
OnInit:
.sex = G_MALE;
- .distance = 2;
+ .distance = 4;
end;
}
diff --git a/npc/012-1/vincent.txt b/npc/012-1/vincent.txt
index 63f1268e..85ae934b 100644
--- a/npc/012-1/vincent.txt
+++ b/npc/012-1/vincent.txt
@@ -7,12 +7,13 @@
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");
+ l("Scorpions everywhere!"),
+ l("Why do they show up, anyway? I thought Scorpions prefered deserts, not beaches."),
+ l("I need to study more... But... I want to play! And I want to make figurines!");
close;
OnInit:
.sex = G_MALE;
- .distance = 2;
+ .distance = 4;
end;
}
diff --git a/npc/012-1/zegas.txt b/npc/012-1/zegas.txt
index 12437d57..bc112793 100644
--- a/npc/012-1/zegas.txt
+++ b/npc/012-1/zegas.txt
@@ -6,13 +6,32 @@
// 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");
+ mesn;
+ mesc l("*sighs*");
+ next;
+ mesn;
+ mesq l("I need someone to clean the storage room...");
+ next;
+ mesn;
+ mesq l("Hey, you! Don't you want to clean the storage room for me?");
+ next;
+ select
+ l("Yes, of course!"),
+ l("'course not!");
+ mes "";
+ mesn;
+ if (@menu == 2) {
+ mesq l("Nobody ever does...");
+ } else {
+ mesc l("Zegas hands you a broom.");
+ mesq l("Good, now start cleaning it!");
+ // TODO: Maybe we actually could have you cleaning the room boxes.
+ // Then you find a peculiar dusty utensil inside. Then, some quest begins.
+ }
close;
OnInit:
.sex = G_MALE;
- .distance = 2;
+ .distance = 4;
end;
}
diff --git a/npc/012-2-1/jessie.txt b/npc/012-2-1/jessie.txt
index c00e868d..9af3dd09 100644
--- a/npc/012-2-1/jessie.txt
+++ b/npc/012-2-1/jessie.txt
@@ -8,11 +8,24 @@
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");
+ l("I am \"uncle\" Jessie and I teach the kids in Candor.");
+ next;
+ mesn;
+ mesq l("Actually... Do you know why the Piou crossed the road?");
+ next;
+ if (askyesno() == ASK_NO) {
+ mesn;
+ mesq l("Dang! I don't know either, but I'm too shy to ask.");
+ } else {
+ mesc l("Why the Piou crossed the road?");
+ input .@jessanswer$;
+ mesn;
+ mesq l("Pfft, you obviously don't know either!");
+ }
close;
OnInit:
.sex = G_MALE;
- .distance = 2;
+ .distance = 4;
end;
}
diff --git a/npc/012-2-1/tanisha.txt b/npc/012-2-1/tanisha.txt
index 94848971..01c92662 100644
--- a/npc/012-2-1/tanisha.txt
+++ b/npc/012-2-1/tanisha.txt
@@ -8,11 +8,12 @@
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");
+ l("Kaan asked me to kill maggots, which I hate! But I'm not seeing any..."),
+ l("I wonder if things were supposed to be this way?");
close;
OnInit:
.sex = G_FEMALE;
- .distance = 2;
+ .distance = 4;
end;
}
diff --git a/npc/012-2-2/sorfina.txt b/npc/012-2-2/sorfina.txt
index 682fa38d..9f389b81 100644
--- a/npc/012-2-2/sorfina.txt
+++ b/npc/012-2-2/sorfina.txt
@@ -7,12 +7,29 @@
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");
+ lg("Welcome, adventurer."),
+ l("I will never know why people barge in others' houses and get away with it."),
+ l("Ah, no, I'm not telling you to go away. Visits are always welcome, it gets lonely over time. But I don't have anything to offer you otherwise.");
+ if (LEGACY && countitem(ClothesPack)) goto L_Legacy;
+ close;
+
+L_Legacy:
+ next;
+ mesn;
+ mesq l("Actually, I see you have some really torn %s.", getitemlink(ClothesPack));
+ next;
+ mesn;
+ mesq l("I see things from several kinds on it - from iron, to steel, to bone, rock, leather, cotton, cashmere, and many others.");
+ next;
+ mesn;
+ mesq l("I wonder what sort of sea disaster could have destroyed them so badly. But, I believe they can be repaired with magic.");
+ next;
+ mesn;
+ mesq l("If only the developers - my next door neighbor - weren't so lazy, maybe I would be able to repair them or know someone able to do that. Sorry.");
close;
OnInit:
.sex = G_FEMALE;
- .distance = 2;
+ .distance = 4;
end;
}
diff --git a/npc/012-2-3/cynric.txt b/npc/012-2-3/cynric.txt
index 83e2c00b..e243c30f 100644
--- a/npc/012-2-3/cynric.txt
+++ b/npc/012-2-3/cynric.txt
@@ -6,13 +6,41 @@
// 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");
+ mesn;
+ mesq l("Welcome to Candor's Bank!");
+ next;
+
+ do
+ {
+ select
+ l("I would like to store some items."),
+ l("I would like to perform money transactions."),
+ menuaction(l("Quit"));
+
+ mes "";
+
+ switch (@menu) {
+ case 1:
+ mesn;
+ mesq l("Sure thing! I'll have your items transported here from Artis before you realize!");
+ next;
+ closeclientdialog();
+ openstorage();
+ close;
+ case 2:
+ MerchantGuild_Bank();
+ break;
+ default:
+ closeclientdialog;
+ goodbye;
+ close;
+ }
+
+ } while (true);
close;
OnInit:
.sex = G_MALE;
- .distance = 2;
+ .distance = 4;
end;
}
diff --git a/npc/012-2-3/nyle.txt b/npc/012-2-3/nyle.txt
index 0c81127a..269bb20f 100644
--- a/npc/012-2-3/nyle.txt
+++ b/npc/012-2-3/nyle.txt
@@ -6,13 +6,63 @@
// 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");
+ mesn;
+ mesq l("Welcome to my fine shop.");
+ next;
+ closeclientdialog;
+ shop .name$;
close;
OnInit:
.sex = G_MALE;
- .distance = 2;
+ .distance = 4;
+ tradertype(NST_MARKET);
+
+ // Equips
+ sellitem BrimmedHat, -1, 35;
+ sellitem Armbands, -1, 20;
+ sellitem IronArmbands, -1, 20;
+ sellitem BrownTrousers, -1, 30;
+ sellitem LousyMoccasins, -1, 20;
+ sellitem WoodenSword, -1, 50;
+ sellitem PiouSlayer, -1, 15;
+ sellitem LeatherShield, -1, 30;
+ sellitem TrainingArrow, -1, 20000;
+
+ // Edible
+ sellitem Bread, -1, 15;
+ sellitem CommonCarp, -1, 8;
+ sellitem GrassCarp, -1, 7;
+ sellitem PiberriesInfusion, -1, 200;
+ sellitem FatesPotion, -1, 100;
+ sellitem ClothoLiquor, -1, 50;
+ sellitem LachesisBrew, -1, 30;
+ sellitem AtroposMixture, -1, 10;
+ sellitem ElixirOfLife, -1, 2;
+
+ // Misc
+ sellitem PiouEgg, -1, 25;
+ end;
+
+OnClock0001:
+ restoreshopitem BrimmedHat, 35;
+ restoreshopitem Armbands, 20;
+ restoreshopitem IronArmbands, 20;
+ restoreshopitem BrownTrousers, 30;
+ restoreshopitem LousyMoccasins, 20;
+ restoreshopitem WoodenSword, 50;
+ restoreshopitem PiouSlayer, 15;
+ restoreshopitem LeatherShield, 30;
+ restoreshopitem TrainingArrow, 20000;
+ restoreshopitem Bread, 15;
+ restoreshopitem CommonCarp, 8;
+ restoreshopitem GrassCarp, 7;
+ restoreshopitem PiberriesInfusion, 200;
+ restoreshopitem FatesPotion, 100;
+ restoreshopitem ClothoLiquor, 50;
+ restoreshopitem LachesisBrew, 30;
+ restoreshopitem AtroposMixture, 10;
+ restoreshopitem ElixirOfLife, 2;
+ restoreshopitem PiouEgg, 25;
end;
}
diff --git a/npc/012-2-4/morgan.txt b/npc/012-2-4/morgan.txt
index 23e97aaf..b68e8d98 100644
--- a/npc/012-2-4/morgan.txt
+++ b/npc/012-2-4/morgan.txt
@@ -8,14 +8,14 @@
012-2-4,26,37,0 script Morgan NPC_MORGAN,{
speech
l("Hello Wanderer."),
- l("I am Morgan, the alchimist."),
+ l("I am Morgan, the alchemist."),
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.");
+ l("Unfortunately my apprentice Zitoni does not bring me fresh potions, so if you need something you should come back later.");
close;
OnInit:
.sex = G_MALE;
- .distance = 2;
+ .distance = 4;
end;
}
diff --git a/npc/012-2-4/zitoni.txt b/npc/012-2-4/zitoni.txt
index 7b94cba3..b1be3bdf 100644
--- a/npc/012-2-4/zitoni.txt
+++ b/npc/012-2-4/zitoni.txt
@@ -67,11 +67,11 @@ L_mick:
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.");
+ mesq("That would be so helpful! Please return soon to tell me about your progress.");
close;
OnInit:
.sex = G_MALE;
- .distance = 2;
+ .distance = 3;
end;
}
diff --git a/npc/012-2-5/rosen.txt b/npc/012-2-5/rosen.txt
index 3fa332c9..f782ebcd 100644
--- a/npc/012-2-5/rosen.txt
+++ b/npc/012-2-5/rosen.txt
@@ -16,6 +16,6 @@
OnInit:
.sex = G_MALE;
- .distance = 2;
+ .distance = 4;
end;
}
diff --git a/npc/012-2-5/toichi.txt b/npc/012-2-5/toichi.txt
index 255c140a..e1759e04 100644
--- a/npc/012-2-5/toichi.txt
+++ b/npc/012-2-5/toichi.txt
@@ -10,12 +10,13 @@
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'.");
+ mesq 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!");
+ mesq l("At least I am doing something!");
close;
+
OnInit:
.sex = G_MALE;
- .distance = 2;
+ .distance = 4;
end;
}
diff --git a/npc/commands/debug-look.txt b/npc/commands/debug-look.txt
index 23acc4da..cf63a207 100644
--- a/npc/commands/debug-look.txt
+++ b/npc/commands/debug-look.txt
@@ -2,15 +2,15 @@ function script BarberDebug {
function setGender {
clear();
- setnpcdialogtitle(l("Appearance Debug - Gender Change"));
- mes(l("Warning: changing your gender will send you back to the character selection screen."));
+ setnpcdialogtitle(l("Appearance Debug - Body Type Change"));
+ mes(l("Warning: changing your body type will send you back to the character selection screen."));
mes("");
- mes(l("Please choose the desired gender:"));
+ mes(l("Please choose the desired body type:"));
next();
menuint(
- l("Male"), GENDER_MALE,
- l("Female"), GENDER_FEMALE,
- l("Non-binary"), GENDER_HIDDEN);
+ l("Tanky"), GENDER_MALE,
+ l("Boobed"), GENDER_FEMALE,
+ l("Neutral"), GENDER_HIDDEN);
Gender = @menuret;
return;
@@ -54,7 +54,7 @@ function script BarberDebug {
mes "";
mes "---";
- mes l("Gender") + ": " + genderToString(Gender);
+ mes l("Body Type") + ": " + genderToString(Gender);
mes l("Hair style") + ": " + getlook(LOOK_HAIR);
mes l("Hair color") + ": " + getlook(LOOK_HAIR_COLOR);
mes l("Race") + ": " + Class + " (" + get_race() + ")";;
@@ -63,7 +63,7 @@ function script BarberDebug {
next;
mes l("What do you want to change?");
select
- menuimage("actions/edit", l("Gender") + " [" + l("Requires logout") + "]"),
+ menuimage("actions/edit", l("Body Type") + " [" + l("Requires logout") + "]"),
menuimage("actions/edit", l("Hair style")),
menuimage("actions/edit", l("Hair color")),
menuimage("actions/edit", l("Race")),
diff --git a/npc/commands/gender.txt b/npc/commands/gender.txt
index b852beb0..9ba2c9a4 100644
--- a/npc/commands/gender.txt
+++ b/npc/commands/gender.txt
@@ -6,17 +6,17 @@
OnCall:
if (.@atcmd_parameters$[0] == "") {
- dispbottom("Your current gender is " + genderToString());
+ dispbottom("Your current body type is " + genderToString());
end;
}
.@desired = stringToGender(.@atcmd_parameters$[0]);
if (.@desired == Gender) {
- dispbottom("Your gender is already " + genderToString());
+ dispbottom("Your body type is already " + genderToString());
} else {
Gender = .@desired;
- dispbottom("Gender changed to " + genderToString());
+ dispbottom("Body Type changed to " + genderToString());
}
end;
diff --git a/npc/functions/barber.txt b/npc/functions/barber.txt
index 1df0a307..c7004eb8 100644
--- a/npc/functions/barber.txt
+++ b/npc/functions/barber.txt
@@ -3,6 +3,7 @@
// omatt
// Reid
// Travolta
+// Jesusalva
// Description:
// Function for supporting barber NPC.
@@ -111,15 +112,46 @@ function script BarberChangeColor {
function script BarberChangeGender {
mesn("Warning");
- mes(b(l("Changing your gender will send you back to the character selection screen.")));
+ mes(b(l("Changing your body type will send you back to the character selection screen.")));
next();
- mes(l("Please select the desired gender:"));
+ mes(l("Please select the desired body type:"));
menuint(
- l("Female"), GENDER_FEMALE,
- l("Male"), GENDER_MALE,
- l("Non-binary"), GENDER_HIDDEN);
+ l("Boobed"), GENDER_FEMALE,
+ l("Tanky"), GENDER_MALE,
+ l("Neutral"), GENDER_HIDDEN);
Gender = @menuret;
return;
}
+
+// THIS FUNCTION SHOULD BE USED ONLY AT REBIRTH
+// Unless current game development design changes!
+function script BarberChangeRace {
+
+ mes l("What's your race?");
+ menuint
+ get_race(GETRACE_FULL, KaizeiViro), KaizeiViro,
+ get_race(GETRACE_FULL, ArgaesViro), ArgaesViro,
+ get_race(GETRACE_FULL, TonoriViro), TonoriViro,
+ get_race(GETRACE_FULL, CaveUkar), CaveUkar,
+ get_race(GETRACE_FULL, MountainUkar), MountainUkar,
+ get_race(GETRACE_FULL, SeaTritan), SeaTritan,
+ get_race(GETRACE_FULL, LakeTritan), LakeTritan,
+ rif(REBIRTH, get_race(GETRACE_FULL, LightRaijin)), LightRaijin,
+ rif(REBIRTH, get_race(GETRACE_FULL, DarkRaijin)), DarkRaijin,
+ rif(REBIRTH, get_race(GETRACE_FULL, FireKralog)), FireKralog,
+ rif(REBIRTH, get_race(GETRACE_FULL, FrostKralog)), FrostKralog;
+
+ mes "";
+ // Something went *terribly* wrong
+ if (@menuret >= LightRaijin && !REBIRTH) {
+ channelmes("#irc", "Illegal operation at BarberChangeRace, sysadmin help required.");
+ consolemes(CONSOLEMES_ERROR, "Account %d tried to change race to %d but rebirth is not set. Race not changed.", getcharid(3), @menuret);
+ return;
+ }
+
+ // Change race and we're done
+ Class = @menuret;
+ return;
+}
diff --git a/npc/functions/gender.txt b/npc/functions/gender.txt
index 0f153c53..209dcc37 100644
--- a/npc/functions/gender.txt
+++ b/npc/functions/gender.txt
@@ -8,6 +8,6 @@ function script stringToGender {
function script genderToString {
.@gender = getarg(0, Gender);
- return .@gender == GENDER_FEMALE ? l("female") :
- .@gender == GENDER_MALE ? l("male") : l("non-binary");
+ return .@gender == GENDER_FEMALE ? l("boobed") :
+ .@gender == GENDER_MALE ? l("tanky") : l("neutral");
}
diff --git a/npc/functions/global_event_handler.txt b/npc/functions/global_event_handler.txt
index c66637ef..a6d634ed 100644
--- a/npc/functions/global_event_handler.txt
+++ b/npc/functions/global_event_handler.txt
@@ -30,6 +30,7 @@ OnPCLogoutEvent:
callfunc("UnequipCookie");
callfunc("MundaneLogout");
callfunc("fishing_cleanup", @fishing_spot$);
+ callfunc("ATLFightEnd");
// Variable cleanup
@fishing_spot$ = "";
@@ -38,6 +39,7 @@ OnPCLogoutEvent:
OnPCDieEvent:
callfunc("ForcedUnmount");
callfunc("MundaneDeath");
+ callfunc("ATLFightEnd");
end;
OnPCBaseLvUpEvent:
diff --git a/npc/functions/main.txt b/npc/functions/main.txt
index c8a37b1c..9618e47e 100644
--- a/npc/functions/main.txt
+++ b/npc/functions/main.txt
@@ -222,3 +222,50 @@ function script getmercenarylink {
function script gethomunculuslink {
return "[@@h" + getarg(0) + "|@@]";
}
+
+// Returns the player race in plain text
+// GETRACE_RACE - returns player race (default)
+// GETRACE_SKIN - returns player skin
+// GETRACE_FULL - returns player skin + race
+// Can take an optional 2nd param with the class
+// get_race( {Flag, {Class}} )
+function script get_race {
+ .@m=getarg(0, GETRACE_RACE);
+ .@g=getarg(1, Class);
+
+ // We also allow this to run without player attached for... science.
+ if (playerattached())
+ {
+ setarray .@allraces$, l("Viro"), l("Viro"), l("Viro"),
+ l("Ukar"), l("Ukar"),
+ l("Tritan"), l("Tritan"),
+ l("Raijin"), l("Raijin"),
+ l("Kralog"), l("Kralog");
+ setarray .@allskins$, l("Kaizei"), l("Argaes"), l("Tonori"),
+ l("Cave"), l("Mountain"),
+ l("Sea"), l("Lake"),
+ l("Light"), l("Dark"),
+ l("Fire"), l("Frost");
+ }
+ else
+ {
+ setarray .@allraces$, ("Viro"), ("Viro"), ("Viro"),
+ ("Ukar"), ("Ukar"),
+ ("Tritan"), ("Tritan"),
+ ("Raijin"), ("Raijin"),
+ ("Kralog"), ("Kralog");
+ setarray .@allskins$, ("Kaizei"), ("Argaes"), ("Tonori"),
+ ("Cave"), ("Mountain"),
+ ("Sea"), ("Lake"),
+ ("Light"), ("Dark"),
+ ("Fire"), ("Frost");
+ }
+
+ if (.@m == GETRACE_RACE)
+ return .@allraces$[.@g];
+ else if (.@m == GETRACE_SKIN)
+ return .@allskins$[.@g];
+ else
+ return .@allskins$[.@g] + " " + .@allraces$[.@g];
+}
+
diff --git a/npc/functions/scoreboards.txt b/npc/functions/scoreboards.txt
index 0dd54b23..120425ee 100644
--- a/npc/functions/scoreboards.txt
+++ b/npc/functions/scoreboards.txt
@@ -101,6 +101,22 @@ function script HallOfAcorns {
return;
}
+function script HallOfATL {
+ mes "";
+ mes l("##BHall Of Artis Legion Training Arena: TOP10##b");
+ mesf("1. %s (%d)", $@atl_name$[0], $@atl_value[0]);
+ mesf("2. %s (%d)", $@atl_name$[1], $@atl_value[1]);
+ mesf("3. %s (%d)", $@atl_name$[2], $@atl_value[2]);
+ mesf("4. %s (%d)", $@atl_name$[3], $@atl_value[3]);
+ mesf("5. %s (%d)", $@atl_name$[4], $@atl_value[4]);
+ mesf("6. %s (%d)", $@atl_name$[5], $@atl_value[5]);
+ mesf("7. %s (%d)", $@atl_name$[6], $@atl_value[6]);
+ mesf("8. %s (%d)", $@atl_name$[7], $@atl_value[7]);
+ mesf("9. %s (%d)", $@atl_name$[8], $@atl_value[8]);
+ mesf("10. %s (%d)", $@atl_name$[9], $@atl_value[9]);
+ return;
+}
+
// HallOfGame()
function script HallOfGame {
if ($MOST_HEROIC$)
@@ -159,6 +175,7 @@ OnInit:
.@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);
+ .@nb = query_sql("SELECT c.name, i.value FROM `char_reg_num_db` AS i, `char` AS c WHERE i.key='ATLRANK' AND i.char_id=c.char_id ORDER BY i.value DESC LIMIT 10", $@atl_name$, $@atl_value);
consolemes(CONSOLEMES_DEBUG, "Scoreboards reloaded");
if (!$@SCOREBOARD_BIND) {
bindatcmd "scoreboard", "@scoreboard::OnCall", 0, 100, 0;
@@ -180,6 +197,7 @@ OnCall:
l("Hall Of Job Level"),
l("Hall Of Guilds"),
l("Hall Of Acorns"),
+ l("Hall Of Artis Legion Training Arena"),
l("Game Statistics"),
l("Quit");
mes "";
@@ -205,6 +223,10 @@ OnCall:
next;
break;
case 6:
+ HallOfATL();
+ next;
+ break;
+ case 7:
HallOfGame();
next;
break;
diff --git a/npc/functions/util.txt b/npc/functions/util.txt
index 8e263eb0..49801982 100644
--- a/npc/functions/util.txt
+++ b/npc/functions/util.txt
@@ -70,42 +70,6 @@ function script getmap {
return getmapname();
}
-// Returns the player race in plain text
-// GETRACE_RACE - returns player race (default)
-// GETRACE_SKIN - returns player skin
-// GETRACE_FULL - returns player skin + race
-// Can take an optional 2nd param with the class
-// get_race( {Flag, {Class}} )
-function script get_race {
- .@m=getarg(0, GETRACE_RACE);
- .@g=getarg(1, Class);
-
- // We also allow this to run without player attached for... science.
- if (playerattached())
- {
- setarray .@allraces$, l("Human"), l("Ukar"), l("Kralog"),
- l("Raijin"), l("Kralog"), l("Raijin"), l("Tritan"),
- l("Human"), l("Human"), l("Tritan"), l("Ukar");
- setarray .@allskins$, l("Kaizei"), l("Cave"), l("Fire"),
- l("Light"), l("Frost"), l("Dark"), l("Sea"), l("Argaes"),
- l("Tonori"), l("Lake"), l("Mountain");
- }
- else
- {
- setarray .@allraces$, "Human", "Ukar", "Kralog", "Raijin",
- "Kralog", "Raijin", "Tritan", "Human", "Human", "Tritan", "Ukar";
- setarray .@allskins$, "Kaizei", "Cave", "Fire", "Light",
- "Frost", "Dark", "Sea", "Argaes", "Tonori", "Lake", "Mountain";
- }
-
- if (.@m == GETRACE_RACE)
- return .@allraces$[.@g];
- else if (.@m == GETRACE_SKIN)
- return .@allskins$[.@g];
- else
- return .@allskins$[.@g] + " " + .@allraces$[.@g];
-}
-
// gettimeparam(GETTIME_X)
// Returns the number of seconds/minutes/hours/days/months/years since 01/01/1970
// This is for truly daily quests, which doesn't imposes a timed wait in hours