summaryrefslogtreecommitdiff
path: root/npc
diff options
context:
space:
mode:
authorJesusaves <cpntb1@ymail.com>2019-07-26 00:03:37 -0300
committerJesusaves <cpntb1@ymail.com>2019-07-26 00:03:37 -0300
commitfec35860f0876dd7bb74a13896c28532c91ca766 (patch)
treeaa5007c71264fac015e2c4f8327fd125bf856c43 /npc
parent4e51c716a63fb1bfd642bb8fd153c57b7a59f5a6 (diff)
parent5c3a947469b62af30542a0773c9cb70c189a692a (diff)
downloadserverdata-fec35860f0876dd7bb74a13896c28532c91ca766.tar.gz
serverdata-fec35860f0876dd7bb74a13896c28532c91ca766.tar.bz2
serverdata-fec35860f0876dd7bb74a13896c28532c91ca766.tar.xz
serverdata-fec35860f0876dd7bb74a13896c28532c91ca766.zip
Merge branch 'master' into testserver
Diffstat (limited to 'npc')
-rw-r--r--npc/002-3/elmo.txt1
-rw-r--r--npc/002-3/nard.txt2
-rw-r--r--npc/003-0/notes113
-rw-r--r--npc/003-0/trickmaster.txt5
-rw-r--r--npc/003-1/constableperry.txt2
-rw-r--r--npc/003-10/kreist.txt14
-rw-r--r--npc/003-3/malindou.txt2
-rw-r--r--npc/012-5/nicholas.txt2
-rw-r--r--npc/014-3/_mobs.txt3
-rw-r--r--npc/017-3/vault.txt24
-rw-r--r--npc/018-2-4/vault.txt24
-rw-r--r--npc/024-16/generals.txt6
-rw-r--r--npc/functions/TODO.txt96
-rw-r--r--npc/functions/clientversion.txt79
-rw-r--r--npc/items/alcohol.txt24
-rw-r--r--npc/scripts.conf1
16 files changed, 230 insertions, 168 deletions
diff --git a/npc/002-3/elmo.txt b/npc/002-3/elmo.txt
index ee36f8e2b..3aa022b19 100644
--- a/npc/002-3/elmo.txt
+++ b/npc/002-3/elmo.txt
@@ -151,6 +151,7 @@ function ExpBoost {
.@BONUS=.@AVG_LEVEL/4;
sc_end SC_OVERLAPEXPUP;
sc_start SC_OVERLAPEXPUP, 3600000, min(25, .@BONUS);
+ mesc l("EXP Gain raised in @@% for one hour!", min(25, .@BONUS)), 2;
return;
}
diff --git a/npc/002-3/nard.txt b/npc/002-3/nard.txt
index f28449899..5feca5164 100644
--- a/npc/002-3/nard.txt
+++ b/npc/002-3/nard.txt
@@ -67,7 +67,7 @@ L_Checker:
sc_end SC_OVERLAPEXPUP;
sc_start SC_OVERLAPEXPUP, 3600000, min(25, .@BONUS);
specialeffect FX_SPECIAL, SELF, getcharid(3);
- mesc l("EXP Gain raised in @@% for one hour!", .@BONUS), 2;
+ mesc l("EXP Gain raised in @@% for one hour!", min(25, .@BONUS)), 2;
next;
showavatar NPC_NARD;
mesn;
diff --git a/npc/003-0/notes b/npc/003-0/notes
new file mode 100644
index 000000000..cc277008b
--- /dev/null
+++ b/npc/003-0/notes
@@ -0,0 +1,113 @@
+FFA - FREE FOR ALL
+ AL_DP (Divine Protection, +DEF vs undead/evil) (raised at Mana Stone)
+
+----
+AOE (DESTRUCTIVE MAGIC)
+ MG_NAPALMBEAT
+ MG_FIREBALL
+ WZ_FROSTNOVA (38%+5% freeze, 73%+7%/lv MATK)
+
+SINGLE TARGET (D.M.)
+ AL_HOLYLIGHT (standard holy magic attack - 125% of MATK)
+ MG_SOULSTRIKE (+5% MATK, +1 hit each 2 levels)
+ MG_COLDBOLT (ele)
+ MG_FIREBOLT (ele)
+ MG_LIGHTININGBOLT (ele)
+ WZ_EARTHSPIKE (ele / not a bolt for PF_DOUBLECASTING)
+ MG_FROSTDIVER (38%+3% freeze, +10% MATK)
+
+
+
+AOE (P.S.)
+ ASC_METEORASSAULT (area: self 2X2, 80%+40%/lv ATK, 10+5%/lv stun/blind/bleed)
+ AC_SHOWER (3x3 attack for BOWS)
+
+SINGLE TARGET (PHYSICAL SCIENCE)
+ SM_BASH (+30% ATK, HIT +5%, após lv 6: stun (5%/lv))
+ MC_MAMMONITE (+50% atk/lv)
+ KN_AUTOCOUNTER (contra-ataque, TOP)
+
+ AC_CHARGEARROW (Ranged, 150% DMG, 6 tiles knockback, NEED GWENDOLYN)
+ SN_SHARPSHOOTING (ULTIMATE ranged attack)
+
+
+
+SUPPORT SCIENCE / SCHOLARSHIP (self)
+ AC_OWL (raise 1 DEX per level)
+ SA_DRAGONOLOGY (PV: +4% ATK, +2% MATK, +1 INT and +4% resist against DRAGONS)
+ TMW2_SAGE (PV: grants up to 1.5 extra mana exp point/level)
+ MG_SRECOVERY (PV: small increase to SP Recovery while idle each 10 sec.)
+ SM_RECOVERY (PV: small increase to HP Recovery while idle each 10 sec.)
+
+ SN_WINDWALK (raise walking speed +2%/lv and flee rate +1/2lv)
+
+ CR_TRUST (PV: MaxHP +200/lv, Holy DEF +5%/lv)
+ AC_VULTURE (PV: raise range and cth with BOWS)
+
+SUPPORT SCIENCE / SCHOLARSHIP (MMO)
+ AL_HEAL (basic healing)
+ AL_INCAGI (raise agi in 3+1/lv)
+ HW_MAGICPOWER (aumenta poder da próxima skill em MATK 5%/lv)
+ SM_PROVOKE (provoca um monstro especifico - exceto BOSS)
+ AL_ANGELUS (14x14, party, def +5%/lv)
+ TF_DETOXIFY (cancels poison. 40% MP.)
+ AC_CONCENTRATION (self: agi/dex 3+1%/lv, unhide enemies 3x3)
+ AB_HIGHNESSHEAL (REAL healing skill)
+ ALL_RESURRECTION (reviver, requer permitir target players mortos)
+ EVOL_MASS_PROVOKE (provoca mobs em área)
+
+ PR_ASPERSIO (bestow holy element on weapon for 1m. Holy dmg to undead/evil.)
+ SA_FLAMELAUNCHER (bestow fire element on weapon for 2m, 70% cth)
+ SA_FROSTWEAPON (bestow water element on weapon for 2m, 70% cth)
+ SA_LIGHTNINGLOADER (bestow wind element on weapon for 2m, 70% cth)
+ SA_SEISMICWEAPON (bestow earth element on weapon for 2m, 70% cth)
+
+ GC_DARKCROW (Max Lv 1: DMG +100%, Short Range DMG +30%)
+
+
+
+TRICKS SCIENCE
+ SA_FREECAST (move after casting)
+ TF_BACKSLIDING (pulo pra trás)
+ MG_FIREWALL (wall of fire: 50% dmg x3+1/lv hits, knockback 2 cells)
+ ALL_FULL_THROTTLE (Stat +20%, full heal, move speed x2 - w/ rebound, last resort)
+ GC_DARKILLUSION (tp pra cima do mob/player com um ataque, pode causar dano extra - 4%/lv)
+ NV_TRICKDEAD (se finge de morto)
+ SO_FIREWALK (deixa fogo aonde passa - 60% MATK)
+
+
+
+
+
+
+UNUSED/SPECIAL
+ BA_PANGVOICE (confuse, EXTREME DESYNC)
+ GS_SNAKEEYE (→AC_VULTURE)
+
+THIEF/MERCHANT-POLICE
+ ALL_INCCARRY
+ TF_STEAL
+ ...?
+ MC_PUSHCART?
+ MC_VENDING?
+
+
+
+BROKEN
+ PF_HPCONVERSION (10% HP vira MP (10%/lv))
+ HP_MEDITATIO (PV: MP Regen +3%/lv, MSP +1%/lv, AL_HEAL +2%/lv stronger)
+ GS_MAGICALBULLET (adds MATK to your regular attack) Does'nt works?
+ CR_DEFENDER (less damage from ranged attacks, but lowers move & attack speed. Req. Shield) - max lv 4 plz. Last 3m?
+
+USEFUL COMMANDS
+ npcskill(<skill id>, <skill lvl>, <stat point>, <NPC level>)
+ npcskill(AL_HEAL, 10, 99, 60);
+
+ unitskilluseid(<GID>, <skill id>, <skill lvl>{, <target id>})
+ unitskillusepos(<GID>, <skill id>, <skill lvl>, <x>, <y>)
+
+*defpattern(<set number>, "<regular expression pattern>", "<event label>")
+*activatepset(<set number>)
+*deactivatepset(<set number>)
+*deletepset(<set number>)
+
diff --git a/npc/003-0/trickmaster.txt b/npc/003-0/trickmaster.txt
index 19c590955..f8b3a8110 100644
--- a/npc/003-0/trickmaster.txt
+++ b/npc/003-0/trickmaster.txt
@@ -19,6 +19,7 @@
"freecast", SA_FREECAST,
"backslide", TF_BACKSLIDING,
"firewall", MG_FIREWALL,
+ "inccarry", ALL_INCCARRY,
"fullthrottle", ALL_FULL_THROTTLE,
"darkillusion", GC_DARKILLUSION,
"trickdead", NV_TRICKDEAD,
@@ -40,6 +41,10 @@
if (!mlearn(MG_FIREWALL, 10, 1, Lockpicks, 1))
mesc l("You do not meet all requisites for this skill."), 1;
break;
+ case ALL_INCCARRY:
+ if (!mlearn(ALL_INCCARRY, 2, 1, Lockpicks, 1))
+ mesc l("You do not meet all requisites for this skill."), 1;
+ break;
case ALL_FULL_THROTTLE:
if (!mlearn(ALL_FULL_THROTTLE, 1, 1, Lockpicks, 1))
mesc l("You do not meet all requisites for this skill."), 1;
diff --git a/npc/003-1/constableperry.txt b/npc/003-1/constableperry.txt
index 04f2e03cb..934aa776d 100644
--- a/npc/003-1/constableperry.txt
+++ b/npc/003-1/constableperry.txt
@@ -7,7 +7,7 @@
// Part of the THIEF/MERCHANT branches
003-1,47,75,0 script Constable Perry NPC_MOUBOO,{
- if (JobLevel > 20 && THIEF_RANK == 0) goto L_Quest;
+ //if (JobLevel > 20 && THIEF_RANK == 0) goto L_Quest;
L_Intro:
mesn;
diff --git a/npc/003-10/kreist.txt b/npc/003-10/kreist.txt
index 510574a98..4ddca7a14 100644
--- a/npc/003-10/kreist.txt
+++ b/npc/003-10/kreist.txt
@@ -73,9 +73,9 @@ L_QuestMaster:
}
// Maybe you finished the quest?
- if (.@q3 >= 100) {
+ if (.@q3 >= 80) {
mesn l("Kreist, Taskmaster");
- mesq l("Good job, you've killed the 100 @@ and reported back in time!", getmonsterlink(.@q2));
+ mesq l("Good job, you've killed the @@ @@ and reported back in time!", 80, getmonsterlink(.@q2));
next;
inventoryplace MercBoxA, 1;
if (MERCENARY_DAILYQUEST == 100) {
@@ -98,7 +98,7 @@ L_QuestMaster:
}
mesn l("Kreist, Taskmaster");
- mesq l("So, please kill @@/100 @@ for us and make the world a safer place!", .@q3, getmonsterlink(.@q2));
+ mesq l("So, please kill @@/@@ @@ for us and make the world a safer place!", .@q3, 80, getmonsterlink(.@q2));
close;
OnInit:
@@ -133,7 +133,7 @@ function script Guardhouse_RandQuestCheck {
.@q3=getq3(General_MobHunting1)+1;
setq3 General_MobHunting1, .@q3;
if (!(.@q3 % 10))
- dispbottom l("@@/100 @@ killed", .@q3, getmonsterlink(.@mobId));
+ dispbottom l("@@/@@ @@ killed", .@q3, 80, getmonsterlink(.@mobId));
}
// Medium Task
@@ -142,7 +142,7 @@ function script Guardhouse_RandQuestCheck {
.@q3=getq3(General_MobHunting2)+1;
setq3 General_MobHunting2, .@q3;
if (!(.@q3 % 10))
- dispbottom l("@@/100 @@ killed", .@q3, getmonsterlink(.@mobId));
+ dispbottom l("@@/@@ @@ killed", .@q3, 80, getmonsterlink(.@mobId));
}
// Hard Task
@@ -151,7 +151,7 @@ function script Guardhouse_RandQuestCheck {
.@q3=getq3(General_MobHunting3)+1;
setq3 General_MobHunting3, .@q3;
if (!(.@q3 % 10))
- dispbottom l("@@/100 @@ killed", .@q3, getmonsterlink(.@mobId));
+ dispbottom l("@@/@@ @@ killed", .@q3, 80, getmonsterlink(.@mobId));
}
// Frostia's Task
@@ -160,7 +160,7 @@ function script Guardhouse_RandQuestCheck {
.@q3=getq3(General_MobHunting4)+1;
setq3 General_MobHunting4, .@q3;
if (!(.@q3 % 10))
- dispbottom l("@@/100 @@ killed", .@q3, getmonsterlink(.@mobId));
+ dispbottom l("@@/@@ @@ killed", .@q3, 50, getmonsterlink(.@mobId));
}
return;
diff --git a/npc/003-3/malindou.txt b/npc/003-3/malindou.txt
index 75235f9bf..21bcf2279 100644
--- a/npc/003-3/malindou.txt
+++ b/npc/003-3/malindou.txt
@@ -411,9 +411,11 @@ OnInit:
query_sql("UPDATE `char` SET `last_x` = '22' WHERE `char`.`last_map`='005-1'");
query_sql("UPDATE `char` SET `last_y` = '22' WHERE `char`.`last_map`='005-1'");
query_sql("UPDATE `char` SET `last_map` = '000-1' WHERE `char`.`last_map`='005-1'");
+ query_sql("UPDATE `skill` SET `id` = '20010' WHERE `skill`.`id`='20011'");
$UPDATE=1563239400;
debugmes "";
debugmes "* Candor Redesign";
+ debugmes "* Magic Class Removed";
debugmes "";
}
diff --git a/npc/012-5/nicholas.txt b/npc/012-5/nicholas.txt
index 324585247..7ffbd14d5 100644
--- a/npc/012-5/nicholas.txt
+++ b/npc/012-5/nicholas.txt
@@ -90,7 +90,7 @@ L_Menu:
l("I want to forge One Handed Weapons!"),
l("I want to forge Shields!"),
l("I want to forge Quivers!"),
- rif(getskilllv(TMW2_CRAFT), l("I would like to remove an item options")),
+ rif(is_staff() && getskilllv(TMW2_CRAFT), l("I would like to remove an item options")),
rif(getskilllv(TMW2_CRAFT), l("I would like to change an item options")),
l("Nothing, thanks!");
diff --git a/npc/014-3/_mobs.txt b/npc/014-3/_mobs.txt
index 54539889d..540992817 100644
--- a/npc/014-3/_mobs.txt
+++ b/npc/014-3/_mobs.txt
@@ -1,11 +1,12 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Map 014-3: Woodlands Central Area mobs
014-3,115,75,91,52 monster Mouboo 1023,22,30000,45000
-014-3,96,102,70,21 monster Forest Mushroom 1060,10,60000,45000
+014-3,63,74,41,48 monster Forest Mushroom 1060,10,60000,45000
014-3,104,102,90,35 monster Squirrel 1032,26,30000,42000
014-3,44,82,37,32 monster Centaur 1139,3,80000,90000
014-3,164,75,31,14 monster Pinkie 1132,9,30000,50000,Oscar::OnKillPinkie
014-3,95,65,49,25 monster Poison Spiky Mushroom 1043,11,45000,45000
+014-3,133,89,49,25 monster Poison Spiky Mushroom 1043,7,45000,45000
014-3,128,112,70,21 monster Mauve Plant 1135,5,90000,90000
014-3,44,82,37,32 monster Chagashroom Field 1128,4,90000,90000
014-3,95,65,49,25 monster Plushroom Field 1011,4,90000,90000
diff --git a/npc/017-3/vault.txt b/npc/017-3/vault.txt
index 64678e95f..9f48bc3be 100644
--- a/npc/017-3/vault.txt
+++ b/npc/017-3/vault.txt
@@ -5,13 +5,12 @@
// Based on BenB idea.
017-3,80,39,0 script Vault NPC_NO_SPRITE,{
- if (MERC_RANK) goto L_Debug;
mesn;
mesq l("There's a shiny safe here. How much money is inside? Nobody is looking at you, great!");
// 2*3 = 6 possibilities, 5 attempts
if (LockPicking(2, 3)) {
Zeny=Zeny+$VAULT_01738039;
- $VAULT_01738039=0;
+ $VAULT_01738039=40;
mesn;
mesq l("Booty!");
} else {
@@ -24,32 +23,13 @@
}
close;
-// TODO: And remove from here.
-L_Debug:
- mesn;
- mesq l("Thiefs frequently attack this vault, and locking it again is a pain. If you break the lock you'll need to pay 100 GP.");
- if (Zeny < 100)
- close;
- // 2*3 = 6 possibilities, 5 attempts
- if (ToDoMerc(2, 3)) {
- getexp 20, 60;
- $VAULT_01738039+=2;
- mesn;
- mesq l("Safe again! You've gained some experience for your hard work!");
- } else {
- mesn;
- mesq l("Dargh, you broke the lock!!");
- Zeny-=100;
- }
- close;
-
OnInit:
.distance=3;
end;
OnClock0201:
OnClock1418:
- $VAULT_01738039+=rand(5,25);
+ $VAULT_01738039+=rand2(5,25);
end;
}
diff --git a/npc/018-2-4/vault.txt b/npc/018-2-4/vault.txt
index 7b778abdd..541a53645 100644
--- a/npc/018-2-4/vault.txt
+++ b/npc/018-2-4/vault.txt
@@ -5,13 +5,12 @@
// Based on BenB idea.
018-2-4,23,24,0 script Vault#01824a NPC_NO_SPRITE,{
- if (MERC_RANK) goto L_Debug;
mesn;
mesq l("There's a shiny safe here. How much money is inside? Nobody is looking at you, great!");
// 3*3 = 9 possibilities, 6~8 attempts
if (LockPicking(3, 3)) {
Zeny=Zeny+$VAULT_01824;
- $VAULT_01824=0;
+ $VAULT_01824=60;
mesn;
mesq l("Booty!");
} else {
@@ -24,32 +23,13 @@
}
close;
-// TODO: And remove from here.
-L_Debug:
- mesn;
- mesq l("Thiefs frequently attack this vault, and locking it again is a pain. If you break the lock you'll need to pay 100 GP.");
- if (Zeny < 100)
- close;
- // 2*3 = 6 possibilities, 5 attempts
- if (ToDoMerc(3, 3)) {
- getexp 20, 90;
- $VAULT_01824+=2;
- mesn;
- mesq l("Safe again! You've gained some experience for your hard work!");
- } else {
- mesn;
- mesq l("Dargh, you broke the lock!!");
- Zeny-=100;
- }
- close;
-
OnInit:
.distance=3;
end;
OnClock0201:
OnClock1216:
- $VAULT_01824+=rand(15,35);
+ $VAULT_01824+=rand2(15,35);
end;
}
diff --git a/npc/024-16/generals.txt b/npc/024-16/generals.txt
index e540da4e1..ca988134e 100644
--- a/npc/024-16/generals.txt
+++ b/npc/024-16/generals.txt
@@ -27,9 +27,9 @@ function script FrostiaTaskMaster {
}
// Maybe you finished the quest?
- if (.@q3 >= 100) {
+ if (.@q3 >= 50) {
mesn;
- mesq l("Good job, you've killed the 100 @@ and reported back in time!", getmonsterlink(.@q2));
+ mesq l("Good job, you've killed the @@ @@ and reported back in time!", 50, getmonsterlink(.@q2));
next;
mesn;
mesq l("It's not much of a reward, but doesn't it feels great to help others in need?! HAHAHA!");
@@ -43,7 +43,7 @@ function script FrostiaTaskMaster {
}
mesn;
- mesq l("Please kill @@/100 @@ for us and make the world a safer place!", .@q3, getmonsterlink(.@q2));
+ mesq l("Please kill @@/@@ @@ for us and make the world a safer place!", .@q3, 50, getmonsterlink(.@q2));
return false;
}
diff --git a/npc/functions/TODO.txt b/npc/functions/TODO.txt
deleted file mode 100644
index 8060fe579..000000000
--- a/npc/functions/TODO.txt
+++ /dev/null
@@ -1,96 +0,0 @@
-// TMW2/LoF Script
-// Author:
-// Jesusalva
-// Description:
-// ToDo - Please disregard for now
-
-// Important variables:
-// MERC_EXP
-// Experience on Thief Tree
-// MERC_RANK
-// Position on the Thief Tree
-
-// ToDoMerc(num_pins, max_pins)
-// Returns 0 upon failure, 1 upon success
-// Closes script if an error happen or if you give up / cannot try.
-//
-// The 'next' is upon script responsability
-// Maximum pin number is infinite. Maximum Pin Positiors range from 2~5.
-// If you fail, you can end up having to start again. If you fail too much,
-// you'll be caught!
-function script ToDoMerc {
- // If you don't have a LockPick, you can't do this (useless)
- if (!countitem(Lockpicks)) {
- mesc l("You need a @@ to try this.", getitemlink(Lockpicks)), 1;
- close;
- }
-
- .@d=getarg(0,1);
- .@m=getarg(1,3);
-
- // Invalid Argument (kill script)
- if (.@d < 1 || .@m < 2 || .@m > 5)
- end;
-
- // You must be rank (number of locks - 1) to try
- if (MERC_RANK+1 < .@d) {
- mesc l("This lock is beyond your current capacity."), 1;
- close;
- }
-
- // Create @pins array (the answer)
- for (.@i=0; .@i < .@d;.@i++)
- @pins[.@i] = rand(1,.@m);
-
- // Check if you'll try to open it.
- mesc l("I'm not sure exactly what we are trying to do, but you seem to need to resolve this puzzle.");
- mesc l("Will you try to unlock it?");
- if (askyesno() == ASK_NO)
- close;
-
- // Setup your attempt
- delitem Lockpicks, 1;
- @pos=0;
- mesc l("There are only @@ pins to set.", .@d);
-
- // You have as many attempts as pins and appliable strenghts.
- // Each merc rank grants you an extra attempt.
- // Each pin takes one attempt.
- // It's not multiplied, so 3 pins with 3 positions: 6 chances, 9 possibilities.
- // There's no penalty, but the attempt is counted working or not!
- // Remember if you fail, all previous pins will be cleared (@pos)
- for (.@i=0; .@i < (.@d+.@m+MERC_RANK) ; .@i++) {
- mesc l("You are trying to lock the @@th pin. What will to do?", @pos+1);
-
- menuint
- rif(.@m >= 4, l("Apply no pressure")), 4,
- rif(.@m >= 2, l("Apply soft pressure")), 2,
- rif(.@m >= 1, l("Apply normal pressure")), 1,
- rif(.@m >= 3, l("Apply strong pressure")), 3,
- rif(.@m >= 5, l("Apply very strong pressure")), 5,
- l("Give up!"), 0;
-
- if (!@menuret)
- close;
-
- // Is your guess correct?
- if (@pins[@pos] == @menuret) {
- mesc l("*click*");
- @pos+=1;
- } else {
- mesc l("This didn't work. All pins are now unlocked!");
- @pos=0;
- // We don't need to clear console, each successful attempt IS counted.
- // Therefore, unsetting 3 pins means you must do 3 new attempts!!
- // The biggie is that you're running against time, here!!!
- }
-
- if (@pos >= .@d) {
- MERC_EXP += .@d*.@m-MERC_RANK;
- return 1;
- }
- }
-
- MERC_EXP += 1;
- return 0;
-}
diff --git a/npc/functions/clientversion.txt b/npc/functions/clientversion.txt
index 32041adfe..59098ee15 100644
--- a/npc/functions/clientversion.txt
+++ b/npc/functions/clientversion.txt
@@ -286,6 +286,7 @@ function script clientupdater {
// seg jul 15 16:41:35 -03 2019
if (UPDATE < 1563219695) {
UPDATE=1563219695;
+ .@dg=true;
// You got recipe book by BSS Quest - mark as complete and get Blueprint
if (getq(NivalisQuest_BlueSageSlimes) == 2) {
getitem any(AncientBlueprint, AlchemyBlueprintA, EquipmentBlueprintA), 1;
@@ -298,7 +299,83 @@ function script clientupdater {
// If you have TMW2_CRAFT skill, you need the bonus recipe
if (getskilllv(TMW2_CRAFT)) {
RECIPES_EQUIPMENT[CraftDagger]=true;
- dispbottom l("Dagger Crafting recipe learnt.");
+ mesc l("Dagger Crafting recipe learnt.");
+ }
+ // Mercenary Rank removed
+ if (MERC_RANK) {
+ THIEF_RANK=MERC_RANK;
+ MERC_RANK=0;
+ mesc l("Your class has been changed from %s to %s.", b(l("Merchant Police")), b(l("Thief")));
+ }
+ if (getskilllv(ALL_INCCARRY)) {
+ skill TF_STEAL, getskilllv(ALL_INCCARRY);
+ skill ALL_INCCARRY, 0, 0;
+ mesc l("Increase Weight skill replaced with Stealing.");
+ }
+ // NEW MAGIC SYSTEM
+ if (getskilllv(SN_SHARPSHOOTING)) {
+ skill AC_CHARGEARROW, getskilllv(SN_SHARPSHOOTING);
+ skill AC_CHARGEARROW, 0, 0;
+ getexp 2000, 150;
+ mesc l("Sharpshooting skill replaced with Charged Arrow.");
+ mesc l("You've got 2000 xp and 150 job xp in apology tokens.");
+ }
+ getskilllist();
+ for (.@i=0; .@i < @skilllist_count; .@i++) {
+ // skip temporary skills
+ if (@skilllist_flag[.@i] != 0)
+ continue;
+ // Only “paid” skills will result in a Scholarship Badge
+ switch (@skilllist_id[.@i]) {
+ case SM_BASH:
+ case SM_ENDURE:
+ case KN_AUTOCOUNTER:
+ case KN_TWOHANDQUICKEN:
+ case TMW2_DEMURE:
+ case AL_ANGELUS:
+ case CR_TRUST:
+ case CR_DEFENDER:
+ case AL_HOLYLIGHT:
+ case TF_DETOXIFY:
+ case ALL_RESURRECTION:
+ case MG_SRECOVERY:
+ case SM_RECOVERY:
+ case PR_ASPERSIO:
+ case AB_HIGHNESSHEAL:
+ case SA_FREECAST:
+ case SA_DRAGONOLOGY:
+ case TMW2_SAGE:
+ case SA_FLAMELAUNCHER:
+ case SA_FROSTWEAPON:
+ case SA_LIGHTNINGLOADER:
+ case SA_SEISMICWEAPON:
+ case MG_FIREBALL:
+ case MG_ENERGYCOAT:
+ case MG_NAPALMBEAT:
+ case MG_FIREBOLT:
+ case MG_COLDBOLT:
+ case MG_LIGHTNINGBOLT:
+ case WZ_EARTHSPIKE:
+ mesc l("A skill has been replaced with an @@.", getitemlink(ScholarshipBadge));
+ getitem ScholarshipBadge, 1;
+ skill @skilllist_id[.@i], 0, 0;
+ getexp 5, (@skilllist_lv[.@i]-1)*1000;
+ break;
+ // Free skills (AL_HEAL and mass provoke) will result in XP
+ // Only Jakod's skills with level 3+ will result in a badge
+ case AL_HEAL:
+ case EVOL_MASS_PROVOKE:
+ if (@skilllist_lv[.@i] >= 3)
+ getitem ScholarshipBadge, 1;
+ case SM_PROVOKE:
+ case NV_TRICKDEAD:
+ .@delval=@skilllist_lv[.@i];
+ mesc l("A skill has been removed, you got @@ job exp and @@ Strange Coin as an apology token.", .@delval*100, .@delval);
+ skill @skilllist_id[.@i], 0, 0;
+ getexp .@delval, .@delval*100;
+ getitem StrangeCoin, .@delval;
+ break;
+ }
}
// Cleanup
deletearray RNGTREASURE_DATE;
diff --git a/npc/items/alcohol.txt b/npc/items/alcohol.txt
index fd9aa0f07..81c6a6bd0 100644
--- a/npc/items/alcohol.txt
+++ b/npc/items/alcohol.txt
@@ -13,9 +13,9 @@
// ALC_THRESHOLD How drunk you are (the bonus)
//
// When drunk, attack speed is lowered but exp gain is increased.
-// Attack Speed Reductor: SC_ATTHASTE_INFINITY
+// Attack Speed Reductor: SC_ATTHASTE_INFINITY (reset upon death), SC_ATTHASTE_POTION2 (not reset upon death)
// Max HP Reductor: SC_INCMHPRATE
-// EXP Increaser: SC_CASH_PLUSEXP
+// EXP Increaser: SC_CASH_PLUSEXP (not reset upon death), SC_OVERLAPEXPUP (reset upon death)
- script alcohol_sc -1,{
@@ -49,27 +49,27 @@ OnUse:
// Default value is 1 minute per alcohol point - you'll be somber after at most two hours.
// Taste is affected by users near you.
- // Each user raises exp bonus in 1%, capped to twice the beverage taste
+ // Each user raises exp bonus in 1%, capped to the beverage taste
// If you are with many people, drink a better beverage! ;-)
getmapxy(.@m$, .@x, .@y, 0);
.@bonus=getareausers(.@m$, .@x-10, .@y-10, .@x+10, .@y+10)-1;
- @taste+=min(@taste*2, .@bonus);
+ @taste+=min(@taste, .@bonus);
// Alcohol EXP Bonus - ponderate average, so having more VIT doesn't means
// more experience - only more time (be careful when mixing alcohol!)
- .@v=remaining_bonus(SC_CASH_PLUSEXP, true);
- .@t=remaining_bonus(SC_CASH_PLUSEXP, false)/1000;
+ .@v=remaining_bonus(SC_OVERLAPEXPUP, true);
+ .@t=remaining_bonus(SC_OVERLAPEXPUP, false)/1000;
if (.@t) .@val1 = ponderate_avg(@taste, @Alcohol, .@v, .@t);
else .@val1 = @taste;
// Put the delay in ms.
- .@delay = remaining_bonus(SC_CASH_PLUSEXP, false);
+ .@delay = remaining_bonus(SC_OVERLAPEXPUP, false);
.@delay = .@t + @Alcohol*.@deltatime;
// Reset EXP Bonus based on the new cumulative delay and average exp bonus
- sc_end SC_CASH_PLUSEXP;
- sc_start SC_CASH_PLUSEXP, .@delay, .@val1;
+ sc_end SC_OVERLAPEXPUP;
+ sc_start SC_OVERLAPEXPUP, .@delay, .@val1;
// Recalculate Alcohol Threshold and time
ALC_THRESHOLD+=@Alcohol;
@@ -78,11 +78,11 @@ OnUse:
ALC_DELAYTIME+=@Alcohol*.@deltatime;
// Debug comment if you need to check stuff
- //debugmes "%d %d | %d %d | f t ", remaining_bonus(SC_CASH_PLUSEXP, false), remaining_bonus(SC_CASH_PLUSEXP, true), remaining_bonus(SC_ATTHASTE_INFINITY, false), remaining_bonus(SC_ATTHASTE_INFINITY, true);
+ //debugmes "%d %d | %d %d | f t ", remaining_bonus(SC_OVERLAPEXPUP, false), remaining_bonus(SC_OVERLAPEXPUP, true), remaining_bonus(SC_ATTHASTE_INFINITY, false), remaining_bonus(SC_ATTHASTE_INFINITY, true);
// For debuff I'll use inc_sc_bonus utilities (exp gain = atk speed loss)
- @min=-(remaining_bonus(SC_CASH_PLUSEXP, true)*2);
- @max=-(remaining_bonus(SC_CASH_PLUSEXP, true)*2);
+ @min=-(remaining_bonus(SC_OVERLAPEXPUP, true)*2);
+ @max=-(remaining_bonus(SC_OVERLAPEXPUP, true)*2);
@type=SC_ATTHASTE_INFINITY;
@delay=@Alcohol*(.@deltatime/1000);
doevent "inc_sc_bonus::OnUse";
diff --git a/npc/scripts.conf b/npc/scripts.conf
index 3c2abaae8..a4ab72b4a 100644
--- a/npc/scripts.conf
+++ b/npc/scripts.conf
@@ -47,7 +47,6 @@
"npc/functions/guild.txt",
"npc/functions/hammocks.txt",
"npc/functions/lockpicks.txt",
-"npc/functions/TODO.txt",
"npc/functions/marriage.txt",
"npc/functions/mobpoint.txt",
"npc/functions/mobhunter.txt",