From 986c6ef4abc2dade347e3e712c5e7c2d7cc4ca3d Mon Sep 17 00:00:00 2001 From: skotlex Date: Thu, 16 Feb 2006 20:42:41 +0000 Subject: - 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 --- src/map/mob.c | 6 +++++- src/map/skill.c | 6 +++--- src/map/status.c | 14 +++++++++----- 3 files changed, 17 insertions(+), 9 deletions(-) (limited to 'src/map') 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; -- cgit v1.2.3-70-g09d2