diff options
author | skotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2006-02-16 20:42:41 +0000 |
---|---|---|
committer | skotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2006-02-16 20:42:41 +0000 |
commit | 986c6ef4abc2dade347e3e712c5e7c2d7cc4ca3d (patch) | |
tree | 7f7cfee00c8e47b126b070e9ae7fbb618d59c6b6 /src | |
parent | 62aeef6736c5e3ec4e4b8fa2fc3a9a12f7e2c9a7 (diff) | |
download | hercules-986c6ef4abc2dade347e3e712c5e7c2d7cc4ca3d.tar.gz hercules-986c6ef4abc2dade347e3e712c5e7c2d7cc4ca3d.tar.bz2 hercules-986c6ef4abc2dade347e3e712c5e7c2d7cc4ca3d.tar.xz hercules-986c6ef4abc2dade347e3e712c5e7c2d7cc4ca3d.zip |
- In CELL_NOSTACK mode, mob_canreach will now ignore other players when checking if there's a path to the player.
- Added RG_RAID to the list of skills that need a status_checkskilluse on skill_attack.
- Added the mapflag check monster_noteleport to AL_TELEPORT.
- Fixed the sc_def rate not being reduced in status_change_start.
- The battle config options sp_rate and hp_rate are now applied independently of the same type of bonuses from cards.
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@5300 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src')
-rw-r--r-- | src/map/mob.c | 6 | ||||
-rw-r--r-- | src/map/skill.c | 6 | ||||
-rw-r--r-- | src/map/status.c | 14 |
3 files changed, 17 insertions, 9 deletions
diff --git a/src/map/mob.c b/src/map/mob.c index 40bf82cb6..f279346d8 100644 --- a/src/map/mob.c +++ b/src/map/mob.c @@ -612,7 +612,11 @@ int mob_can_reach(struct mob_data *md,struct block_list *bl,int range, int state easy = 1;
break;
}
-
+#ifdef CELL_NOSTACK
+ //In no stack mode, do these path searches ignoring other players as it's just
+ //for reachability judging, not the actual path used. [Skotlex]
+ easy |= 0x30000;
+#endif
if( md->bl.m != bl->m) // ˆá‚¤ƒƒbƒv
return 0;
diff --git a/src/map/skill.c b/src/map/skill.c index 56260bb47..13d8d0cb2 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -1525,7 +1525,7 @@ int skill_attack( int attack_type, struct block_list* src, struct block_list *ds return 0;
//Note that splash attacks often only check versus the targetted mob, those around the splash area normally don't get checked for being hidden/cloaked/etc. [Skotlex]
- if ((skill_get_nk(skillid) == NK_SPLASH_DAMAGE || skillid == ASC_METEORASSAULT || skillid == SN_SHARPSHOOTING)
+ if ((skill_get_nk(skillid) == NK_SPLASH_DAMAGE || skillid == ASC_METEORASSAULT || skillid == SN_SHARPSHOOTING || skillid == RG_RAID)
&& !status_check_skilluse(dsrc, bl, skillid, 1))
return 0;
@@ -3163,7 +3163,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in if(status_isdead(bl) && skillid != NPC_REBIRTH && skillid != ALL_RESURRECTION && skillid != PR_REDEMPTIO)
return 1;
- if (skillid >= 0 && skillid < sizeof(SkillStatusChangeTable)/sizeof(SkillStatusChangeTable[0]))
+ if (skillid > 0 && skillid < MAX_SKILL)
type = SkillStatusChangeTable[skillid];
//Shouldn't be needed, skillnotok's return value is highly unlikely to have changed after you started casting. [Skotlex]
// if (sd && skillnotok(skillid, sd)) // [MouseJstr]
@@ -4344,7 +4344,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in clif_skill_warppoint(sd,skillid,"Random",
mapindex_id2name(sd->status.save_point.map),"","");
}
- } else if(dstmd)
+ } else if(dstmd && !map[sd->bl.m].flag.monster_noteleport)
mob_warp(dstmd,-1,-1,-1,3);
break;
diff --git a/src/map/status.c b/src/map/status.c index bb7fd47a0..61b755e84 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -610,8 +610,8 @@ int status_calc_pc(struct map_session_data* sd,int first) // these are not zeroed. [zzo]
sd->speed = DEFAULT_WALK_SPEED;
- sd->hprate=battle_config.hp_rate;
- sd->sprate=battle_config.sp_rate;
+ sd->hprate=100;
+ sd->sprate=100;
sd->castrate=100;
sd->delayrate=100;
sd->dsprate=100;
@@ -1386,12 +1386,14 @@ int status_calc_pc(struct map_session_data* sd,int first) // Apply relative modifiers from equipment
if(sd->hprate!=100)
sd->status.max_hp = sd->status.max_hp * sd->hprate/100;
+ if(battle_config.hp_rate != 100)
+ sd->status.max_hp = sd->status.max_hp * battle_config.hp_rate/100;
if(sd->status.max_hp > battle_config.max_hp)
sd->status.max_hp = battle_config.max_hp;
+ if(sd->status.max_hp <= 0) sd->status.max_hp = 1;
if(sd->status.hp>sd->status.max_hp)
sd->status.hp=sd->status.max_hp;
- if(sd->status.max_hp <= 0) sd->status.max_hp = 1;
// Basic natural HP regeneration value
sd->nhealhp = 1 + (sd->paramc[2]/5) + (sd->status.max_hp/200);
@@ -1443,7 +1445,9 @@ int status_calc_pc(struct map_session_data* sd,int first) // Apply relative modifiers from equipment
if(sd->sprate!=100)
sd->status.max_sp = sd->status.max_sp * sd->sprate/100;
-
+ if(battle_config.sp_rate != 100)
+ sd->status.max_sp = sd->status.max_sp * battle_config.sp_rate/100;
+
if(sd->status.max_sp > battle_config.max_sp)
sd->status.max_sp = battle_config.max_sp;
if(sd->status.sp>sd->status.max_sp)
@@ -3494,7 +3498,7 @@ int status_change_start(struct block_list *bl,int type,int rate,int val1,int val //Check rate
if (!(flag&(4|1))) {
rate*=100; //Pass to 10000 = 100%
- if (flag&8) {
+ if (!(flag&8)) {
race = status_get_sc_def(bl, type);
if (race)
rate -= rate*race/10000;
|