diff options
-rw-r--r-- | Changelog-Trunk.txt | 9 | ||||
-rw-r--r-- | db/Changelog.txt | 2 | ||||
-rw-r--r-- | db/skill_db.txt | 12 | ||||
-rw-r--r-- | src/map/mob.c | 14 | ||||
-rw-r--r-- | src/map/skill.c | 11 | ||||
-rw-r--r-- | src/map/skill.h | 25 |
6 files changed, 48 insertions, 25 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index 8197c3ef1..d12af705f 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -4,6 +4,15 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK. 2007/04/13 + * Changed the meaning of inf2=0x1000. Now it is used to "disable usage on + enemies", which only works for non-aggressive (inf!=1) skills. + * If a skill is party/guild only (inf2 0x400/0x800) it will also be + castable on enemies if the skill's inf is 1 (offensive target) + * Corrected the mob behaviour when it locks into an enemy it can't chase. + Previously it would get stuck on a lock->unlock->lock loop, with each + unlock resetting the "random walk" timer, causing the mob to just idle in + place. Now they will attempt idle skills and no longer reset the "random + walk" timer, so they behave as if they were in Idle state properly. * Now the bonus bAtkEle will be transferred directly to the weapon when the script is in the ammunition, and you are wielding a weapon that consumes ammo per atttack. diff --git a/db/Changelog.txt b/db/Changelog.txt index 93e94557b..7bc68c118 100644 --- a/db/Changelog.txt +++ b/db/Changelog.txt @@ -20,6 +20,8 @@ ======================== 04/13 + * Corrected the inf2 of some skills considering the changes to the inf2 + party/guild only and 'allow enemy' meanings. [Skotlex] * Thanatos, Kiel and Randgris now use Ganbantein [Playtester] * Added Magmaring mob [Playtester] 04/12 diff --git a/db/skill_db.txt b/db/skill_db.txt index 868a11d58..ad169ee85 100644 --- a/db/skill_db.txt +++ b/db/skill_db.txt @@ -32,9 +32,9 @@ // 0x0080- trap // 0x0100- skill that damages/targets yourself // 0x0200- cannot be casted on self (if inf = 4, auto-select target skill) -// 0x0400- usable only on party-members -// 0x0800- usable only on guild-mates -// 0x1000- allow usage on enemies too (use with 0x0400/0x0800) +// 0x0400- usable only on party-members (and enemies if skill is offensive) +// 0x0800- usable only on guild-mates (and enemies if skill is offensive) +// 0x1000- disable usage on enemies (for non-offensive skills). // 13 maxcount: max amount of skill instances to place on the ground when // player_land_skill_limit/monster_land_skill_limit is enabled. // 14 attack type (none, weapon, magic, misc) @@ -327,7 +327,7 @@ 286,2,6,2,1,0x1,0,5,1,yes,0,0,0,magic,0 //SA_DELUGE#Deluge# 287,2,6,2,4,0x1,0,5,1,yes,0,0,0,magic,0 //SA_VIOLENTGALE#Whirlwind# 288,3,6,2,0,0x1,0,5,1,yes,0,0,0,magic,0 //SA_LANDPROTECTOR#Magnetic Earth# -289,9,6,1,0,0x1,0,5,1,yes,0,0x1E00,0,magic,0 //SA_DISPELL#Dispel# +289,9,6,1,0,0x1,0,5,1,yes,0,0xE00,0,magic,0 //SA_DISPELL#Dispel# 290,0,6,4,0,0x1,0,10,1,yes,0,0,0,magic,0 //SA_ABRACADABRA#Hocus-pocus# 291,9,6,1,0,0x1,0,1,1,yes,0,0x2,0,magic,0 //SA_MONOCELL#Monocell# 292,9,6,1,0,0x1,0,1,1,yes,0,0x2,0,magic,0 //SA_CLASSCHANGE#Class Change# @@ -412,7 +412,7 @@ 371,-2,8,4,-1,0,0,5,1,no,0,0x200,0,weapon,0 //CH_TIGERFIST#Glacier Fist# 372,-2,8,4,-1,0,0,10,-1:-1:-2:-2:-3:-3:-4:-4:-5:-5,no,0,0x200,0,weapon,0 //CH_CHAINCRUSH#Chain Crush Combo# 373,0,6,4,0,0x1,0,5,1,no,0,0,0,magic,0 //PF_HPCONVERSION#Health Conversion# -374,9,6,16,0,0x1,0,1,1,yes,0,0x1E00,0,none,0 //PF_SOULCHANGE#Soul Exhale# +374,9,6,1,0,0x1,0,1,1,yes,0,0xE00,0,none,0 //PF_SOULCHANGE#Soul Exhale# 375,9,6,1,0,0x98,0,5,1,yes,0,0,0,magic,0 //PF_SOULBURN#Soul Siphon# 376,0,0,0,0,0x1,0,5,1,no,0,0,0,weapon,0 //ASC_KATAR#Advanced Katar Mastery# //377,0,0,4,0,0x1,0,10,1,no,0,0,0,misc,0 //ASC_HALLUCINATION#Hallucination Walk# @@ -434,7 +434,7 @@ 393,0,0,4,0,0x1,0,1,1,yes,0,0,0,none,0 //CR_SYNTHESISPOTION#Potion Synthesis# 394,9,8,1,-1,0,0,10,-9,yes,0,0,0,weapon,0 //CG_ARROWVULCAN#Vulcan Arrow# 395,0,0,4,0,0x1,3,1,1,yes,0,0x40,0,misc,2 //CG_MOONLIT#Sheltering Bliss# -396,-1,6,16,0,0x1,0,1,1,yes,0,0x600,0,none,0 //CG_MARIONETTE#Marionette Control# +396,1,6,16,0,0x1,0,1,1,yes,0,0x600,0,none,0 //CG_MARIONETTE#Marionette Control# 397,5,8,1,-1,0x20,0,5,5,no,0,0,0,weapon,0 //LK_SPIRALPIERCE#Spiral Pierce# 398,4,6,1,-1,0,0,5,1,no,0,0,0,weapon,0 //LK_HEADCRUSH#Traumatic Blow# 399,4,6,1,-1,0,0,10,1,no,0,0,0,weapon,0 //LK_JOINTBEAT#Vital Strike# diff --git a/src/map/mob.c b/src/map/mob.c index f4e30e51f..43597979e 100644 --- a/src/map/mob.c +++ b/src/map/mob.c @@ -1316,8 +1316,18 @@ static int mob_ai_sub_hard(struct block_list *bl,va_list ap) return 0; //Follow up if possible. - if (!mob_can_reach(md, tbl, md->min_chase, MSS_RUSH) || - !unit_walktobl(&md->bl, tbl, md->status.rhw.range, 2)) + if (mob_can_reach(md, tbl, md->min_chase, MSS_RUSH) && + unit_walktobl(&md->bl, tbl, md->status.rhw.range, 2)) + return 0; //Chasing. + + //Can't chase locked target. Return to IDLE. + if(md->state.skillstate == MSS_IDLE || + md->state.skillstate == MSS_WALK) + { //Mob is already idle, try a idle skill before giving up. + if (!(++md->ud.walk_count%IDLE_SKILL_INTERVAL)) + mobskill_use(md, tick, -1); + md->target_id=0; + } else mob_unlocktarget(md,tick); return 0; } diff --git a/src/map/skill.c b/src/map/skill.c index d7334a079..b2dfd3abd 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -5676,14 +5676,17 @@ int skill_castend_id (int tid, unsigned int tick, int id, int data) if(inf&INF_ATTACK_SKILL || (inf&INF_SELF_SKILL && inf2&INF2_NO_TARGET_SELF)) //Combo skills inf = BCT_ENEMY; //Offensive skill. - else - inf = 0; + else if(inf2&INF2_NO_ENEMY) + inf = BCT_NOENEMY; if(inf2 & (INF2_PARTY_ONLY|INF2_GUILD_ONLY) && src != target) + { inf |= (inf2&INF2_PARTY_ONLY?BCT_PARTY:0)| - (inf2&INF2_GUILD_ONLY?BCT_GUILD:0)| - (inf2&INF2_ALLOW_ENEMY?BCT_ENEMY:0); + (inf2&INF2_GUILD_ONLY?BCT_GUILD:0); + //Remove neutral targets (but allow enemy if skill is designed to be so) + inf &= ~BCT_NEUTRAL; + } if (inf && battle_check_target(src, target, inf) <= 0) break; diff --git a/src/map/skill.h b/src/map/skill.h index 55233f3c3..9d61a8f54 100644 --- a/src/map/skill.h +++ b/src/map/skill.h @@ -36,20 +36,19 @@ //Constants to identify a skill's inf2 value. #define INF2_QUEST_SKILL 1 //NPC skills are those that players can't have in their skill tree. -#define INF2_NPC_SKILL 2 -#define INF2_WEDDING_SKILL 4 -#define INF2_SPIRIT_SKILL 8 -#define INF2_GUILD_SKILL 16 -#define INF2_SONG_DANCE 32 -#define INF2_ENSEMBLE_SKILL 64 -#define INF2_TRAP 128 +#define INF2_NPC_SKILL 0x2 +#define INF2_WEDDING_SKILL 0x4 +#define INF2_SPIRIT_SKILL 0x8 +#define INF2_GUILD_SKILL 0x10 +#define INF2_SONG_DANCE 0x20 +#define INF2_ENSEMBLE_SKILL 0x40 +#define INF2_TRAP 0x80 //Refers to ground placed skills that will target the caster as well (like Grandcross) -#define INF2_TARGET_SELF 256 -#define INF2_NO_TARGET_SELF 512 -#define INF2_PARTY_ONLY 1024 -#define INF2_GUILD_ONLY 2048 -//For Party/Guild only skills that can ALSO be used on enemies. -#define INF2_ALLOW_ENEMY 4096 +#define INF2_TARGET_SELF 0x100 +#define INF2_NO_TARGET_SELF 0x200 +#define INF2_PARTY_ONLY 0x400 +#define INF2_GUILD_ONLY 0x800 +#define INF2_NO_ENEMY 0x1000 //Walk intervals at which chase-skills are attempted to be triggered. #define WALK_SKILL_INTERVAL 5 |