From 70afc9d7d00b346e3139363abd411a51874ce5b5 Mon Sep 17 00:00:00 2001 From: skotlex Date: Mon, 11 Sep 2006 14:27:49 +0000 Subject: - Summoned and slave mobs won't show up on @showmobs anymore. - Moved Spider Web damage bonus from battle_calc_damage to battle_attr_fix, so that damage will be doubled based on the actual attack element. - Adjusted autospell cards to trigger only on physical weapon attacks. - Adjusted a bit the heal code, it should now show either the full heal amount, or 0, depending on whether the target was healed at all or not (this also means it shows 0 if you try to heal a full-life character.. but it's the closest I've gotten to make it display 0 on Berserked chars) - Memorize will be consumed even on instant cast spells now. - Berserk will end now if hit and remaining hp is less or equal to 100. - Guild Aura will be removed on sc-load to prevent Guild Masters from getting that bonus from the old implementation. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@8705 54d463be-8e91-2dee-dedb-b68131a5f0ec --- src/map/atcommand.c | 7 ++++--- src/map/battle.c | 9 ++------- src/map/skill.c | 29 ++++++++++++++++------------- src/map/status.c | 7 +++++++ 4 files changed, 29 insertions(+), 23 deletions(-) (limited to 'src/map') diff --git a/src/map/atcommand.c b/src/map/atcommand.c index 57a439885..10b226257 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -9828,8 +9828,6 @@ static int atshowmobs_sub(struct block_list *bl,va_list ap) static int number=0; struct mob_data *md; - nullpo_retr(0, bl); - if(!ap){ number=0; return 0; @@ -9840,7 +9838,10 @@ static int atshowmobs_sub(struct block_list *bl,va_list ap) md = (struct mob_data *)bl; - if(md && fd && (mob_id==-1 || (md->class_==mob_id))){ + if(md->special_state.ai || md->master_id) + return 0; //Hide slaves and player summoned mobs. [Skotlex] + + if(fd && (mob_id==-1 || (md->class_==mob_id))){ clif_viewpoint(sd, 1, 1, bl->x, bl->y, ++number, 0xFFFFFF); add_timer(gettick()+5000, atshowmobs_timer, fd, number); } diff --git a/src/map/battle.c b/src/map/battle.c index 2f254bc30..bce72d52e 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -201,6 +201,8 @@ int battle_attr_fix(struct block_list *src, struct block_list *target, int damag ratio += enchant_eff[sc->data[SC_VIOLENTGALE].val1-1]; if(sc->data[SC_DELUGE].timer!=-1 && atk_elem == ELE_WATER) ratio += enchant_eff[sc->data[SC_DELUGE].val1-1]; + if(sc->data[SC_SPIDERWEB].timer!=-1 && atk_elem == ELE_FIRE) // [Celest] + damage *= 2; //FIXME: Double damage instead of double ratio? } if (tsc && tsc->count) { @@ -335,13 +337,6 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,i status_change_end( bl,SC_AETERNA,-1 ); } - if(sc->data[SC_SPIDERWEB].timer!=-1) // [Celest] - if ((flag&BF_SKILL && skill_get_pl(skill_num)==ELE_FIRE) || - (!flag&BF_SKILL && status_get_attack_element(src)==ELE_FIRE)) { - damage<<=1; - status_change_end(bl, SC_SPIDERWEB, -1); - } - //Finally damage reductions.... if(sc->data[SC_ASSUMPTIO].timer != -1){ if(map_flag_vs(bl->m)) diff --git a/src/map/skill.c b/src/map/skill.c index aa5df9d19..92ad67ecd 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -1386,8 +1386,11 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int } //Reports say that autospell effects get triggered on skills and pretty much everything including splash attacks. [Skotlex] - if(sd && !status_isdead(bl) && src != bl && - !(skillid && skill_get_nk(skillid)&NK_NO_DAMAGE)) { + //But Gravity Patched this silently, and it now seems to trigger only on + //weapon attacks. + if(sd && !status_isdead(bl) && src != bl && attack_type&BF_WEAPON +// !(skillid && skill_get_nk(skillid)&NK_NO_DAMAGE) + ) { struct block_list *tbl; struct unit_data *ud; int i, skilllv; @@ -3283,14 +3286,18 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in ) { //Bounce back heal if (--tsc->data[SC_KAITE].val2 <= 0) status_change_end(bl, SC_KAITE, -1); - if (src == bl) heal=0; //When you try to heal yourself and you are under Kaite, the heal is voided. - clif_skill_nodamage (src, src, skillid, heal, 1); - heal_get_jobexp = status_heal(src,heal,0,0); - } else { - clif_skill_nodamage (src, bl, skillid, heal, 1); - heal_get_jobexp = status_heal(bl,heal,0,0); + if (src == bl) + heal=0; //When you try to heal yourself under Kaite, the heal is voided. + else { + bl = src; + dstsd = sd; + } } + heal_get_jobexp = status_heal(bl,heal,0,0); + //All or nothing check for LK_BERSERK. + clif_skill_nodamage (src, bl, skillid, heal_get_jobexp?heal:0, 1); + if(sd && dstsd && heal > 0 && sd != dstsd && battle_config.heal_exp > 0){ heal_get_jobexp = heal_get_jobexp * battle_config.heal_exp / 100; if (heal_get_jobexp <= 0) @@ -8524,11 +8531,7 @@ int skill_castfix_sc (struct block_list *bl, int time) time -= time * (sc->data[SC_SUFFRAGIUM].val1 * 15) / 100; status_change_end(bl, SC_SUFFRAGIUM, -1); } - - if (time <= 0) - return 0; //Only Suffragium gets consumed even if time is 0 - - if (sc->data[SC_MEMORIZE].timer != -1 && time > 0) { + if (sc->data[SC_MEMORIZE].timer != -1) { time>>=1; if ((--sc->data[SC_MEMORIZE].val2) <= 0) status_change_end(bl, SC_MEMORIZE, -1); diff --git a/src/map/status.c b/src/map/status.c index 069e02f64..7cf7109b2 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -655,6 +655,9 @@ int status_damage(struct block_list *src,struct block_list *target,int hp, int s (sc->data[SC_PROVOKE].timer==-1 || !sc->data[SC_PROVOKE].val2) && status->hp < status->max_hp>>2) sc_start4(target,SC_PROVOKE,100,10,1,0,0,0); + if (sc->data[SC_BERSERK].timer != -1 && + status->hp <= 100) + status_change_end(target, SC_BERSERK, -1); } switch (target->type) @@ -5601,6 +5604,10 @@ int status_change_start(struct block_list *bl,int type,int rate,int val1,int val if (!val3) return 0; break; + case SC_GUILDAURA: + //Compatibility Upgrade due to Guild Aura code rewrite + //(older saved SC versions would load up with huge bonuses) + return 0; } //Those that make you stop attacking/walking.... switch (type) { -- cgit v1.2.3-70-g09d2