summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--db/mob_db2.conf1
-rw-r--r--db/pre-re/mob_db.conf1
-rw-r--r--db/re/mob_db.conf1
-rw-r--r--doc/mob_db_mode_list.txt35
-rw-r--r--src/map/mob.c3
-rw-r--r--src/map/skill.c2
-rw-r--r--src/map/status.h1
7 files changed, 27 insertions, 17 deletions
diff --git a/db/mob_db2.conf b/db/mob_db2.conf
index e1084cff2..f7b8bd9af 100644
--- a/db/mob_db2.conf
+++ b/db/mob_db2.conf
@@ -76,6 +76,7 @@ mob_db: (
ChangeTargetMelee: true/false (bool, defaults to false)
ChangeTargetChase: true/false (bool, defaults to false)
TargetWeak: true/false (bool, defaults to false)
+ NoKnockback: true/false (bool, defaults to false)
}
MoveSpeed: move speed (int, defaults to 0)
AttackDelay: attack delay (int, defaults to 4000)
diff --git a/db/pre-re/mob_db.conf b/db/pre-re/mob_db.conf
index baf88d52c..7d3da3f6d 100644
--- a/db/pre-re/mob_db.conf
+++ b/db/pre-re/mob_db.conf
@@ -76,6 +76,7 @@ mob_db: (
ChangeTargetMelee: true/false (bool, defaults to false)
ChangeTargetChase: true/false (bool, defaults to false)
TargetWeak: true/false (bool, defaults to false)
+ NoKnockback: true/false (bool, defaults to false)
}
MoveSpeed: move speed (int, defaults to 0)
AttackDelay: attack delay (int, defaults to 4000)
diff --git a/db/re/mob_db.conf b/db/re/mob_db.conf
index d4e4f4357..41dd8a35b 100644
--- a/db/re/mob_db.conf
+++ b/db/re/mob_db.conf
@@ -76,6 +76,7 @@ mob_db: (
ChangeTargetMelee: true/false (bool, defaults to false)
ChangeTargetChase: true/false (bool, defaults to false)
TargetWeak: true/false (bool, defaults to false)
+ NoKnockback: true/false (bool, defaults to false)
}
MoveSpeed: move speed (int, defaults to 0)
AttackDelay: attack delay (int, defaults to 4000)
diff --git a/doc/mob_db_mode_list.txt b/doc/mob_db_mode_list.txt
index 08abf800d..32e7a0e8d 100644
--- a/doc/mob_db_mode_list.txt
+++ b/doc/mob_db_mode_list.txt
@@ -11,22 +11,23 @@
Bit Legend:
-------------------------------------------------------------------------------
-MD_CANMOVE | 0x0001 | 1
-MD_LOOTER | 0x0002 | 2
-MD_AGGRESSIVE | 0x0004 | 4
-MD_ASSIST | 0x0008 | 8
-MD_CASTSENSOR_IDLE | 0x0010 | 16
-MD_BOSS | 0x0020 | 32
-MD_PLANT | 0x0040 | 64
-MD_CANATTACK | 0x0080 | 128
-MD_DETECTOR | 0x0100 | 256
-MD_CASTSENSOR_CHASE | 0x0200 | 512
-MD_CHANGECHASE | 0x0400 | 1024
-MD_ANGRY | 0x0800 | 2048
-MD_CHANGETARGET_MELEE | 0x1000 | 4096
-MD_CHANGETARGET_CHASE | 0x2000 | 8192
-MD_TARGETWEAK | 0x4000 | 16384
-MD_RANDOMTARGET | 0x8000 | 32768 (not implemented)
+MD_CANMOVE | 0x00001 | 1
+MD_LOOTER | 0x00002 | 2
+MD_AGGRESSIVE | 0x00004 | 4
+MD_ASSIST | 0x00008 | 8
+MD_CASTSENSOR_IDLE | 0x00010 | 16
+MD_BOSS | 0x00020 | 32
+MD_PLANT | 0x00040 | 64
+MD_CANATTACK | 0x00080 | 128
+MD_DETECTOR | 0x00100 | 256
+MD_CASTSENSOR_CHASE | 0x00200 | 512
+MD_CHANGECHASE | 0x00400 | 1024
+MD_ANGRY | 0x00800 | 2048
+MD_CHANGETARGET_MELEE | 0x01000 | 4096
+MD_CHANGETARGET_CHASE | 0x02000 | 8192
+MD_TARGETWEAK | 0x04000 | 16384
+MD_NOKNOCKBACK | 0x08000 | 32768
+MD_RANDOMTARGET | 0x10000 | 65536 (not implemented)
Explanation for modes:
-------------------------------------------------------------------------------
@@ -74,6 +75,8 @@ Target Weak: Allows aggressive monsters to only be aggressive against
characters that are five levels below it's own level.
For example, a monster of level 104 will not pick fights with a level 99.
+NoKnockback: Monsters will be immune to Knockback's.
+
Random Target: Picks a new random target in range on each attack / skill.
(not implemented)
diff --git a/src/map/mob.c b/src/map/mob.c
index 063a1ff6e..e26006599 100644
--- a/src/map/mob.c
+++ b/src/map/mob.c
@@ -3760,6 +3760,8 @@ int mob_read_db_mode_sub(struct mob_db *entry, struct config_setting_t *t)
mode |= libconfig->setting_get_bool(t2) ? MD_CHANGETARGET_CHASE : 0;
if ((t2 = libconfig->setting_get_member(t, "TargetWeak")))
mode |= libconfig->setting_get_bool(t2) ? MD_TARGETWEAK : 0;
+ if ((t2 = libconfig->setting_get_member(t, "NoKnockback")))
+ mode |= libconfig->setting_get_bool(t2) ? MD_NOKNOCKBACK : 0;
return mode;
}
@@ -4109,6 +4111,7 @@ int mob_read_db_sub(struct config_setting_t *mobt, int n, const char *source)
* ChangeTargetMelee: true/false
* ChangeTargetChase: true/false
* TargetWeak: true/false
+ * NoKnockback: true/false
* }
* MoveSpeed: move speed
* AttackDelay: attack delay
diff --git a/src/map/skill.c b/src/map/skill.c
index 366d66234..fb08103e7 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -2089,7 +2089,7 @@ int skill_blown(struct block_list* src, struct block_list* target, int count, in
case BL_MOB:
{
const struct mob_data *md = BL_UCCAST(BL_MOB, target);
- if (md->class_ == MOBID_EMPELIUM)
+ if (md->status.mode&MD_NOKNOCKBACK)
return 0;
if (src != target && is_boss(target)) // Bosses can't be knocked-back
return 0;
diff --git a/src/map/status.h b/src/map/status.h
index 85219b280..14cda8545 100644
--- a/src/map/status.h
+++ b/src/map/status.h
@@ -1823,6 +1823,7 @@ enum e_mode
MD_CHANGETARGET_MELEE = 0x1000,
MD_CHANGETARGET_CHASE = 0x2000,
MD_TARGETWEAK = 0x4000,
+ MD_NOKNOCKBACK = 0x8000,
MD_MASK = 0xFFFF,
};