summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/map/mob.c6
-rw-r--r--src/map/pc.c9
-rw-r--r--src/map/skill.c4
-rw-r--r--src/map/status.c13
-rw-r--r--src/map/unit.c4
5 files changed, 21 insertions, 15 deletions
diff --git a/src/map/mob.c b/src/map/mob.c
index 9442adddf..2033cddbf 100644
--- a/src/map/mob.c
+++ b/src/map/mob.c
@@ -1594,15 +1594,15 @@ void mob_damage(struct mob_data *md, struct block_list *src, int damage)
{
int char_id = 0, flag = 0;
+ if (damage > 0) //Store total damage...
+ md->tdmg+=damage;
+
if(md->guardian_data && md->guardian_data->number < MAX_GUARDIANS) // guardian hp update [Valaris] (updated by [Skotlex])
md->guardian_data->castle->guardian[md->guardian_data->number].hp = md->status.hp;
if (battle_config.show_mob_info&3)
clif_charnameack (0, &md->bl);
- if (damage > 0) //Store total damage...
- md->tdmg+=damage;
-
if (!src)
return;
diff --git a/src/map/pc.c b/src/map/pc.c
index 5ad01d285..81c503188 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -5094,21 +5094,24 @@ int pc_dead(struct map_session_data *sd,struct block_list *src)
if (sd->sc.count && sd->sc.data[SC_KAIZEL].timer != -1)
{
+ j = sd->sc.data[SC_KAIZEL].val1; //Kaizel Lv.
pc_setstand(sd);
+ status_change_clear(&sd->bl,0);
clif_skill_nodamage(&sd->bl,&sd->bl,ALL_RESURRECTION,1,1);
if(sd->special_state.restart_full_recover)
status_percent_heal(&sd->bl, 100, 100);
else
- status_percent_heal(&sd->bl, 10*sd->sc.data[SC_KAIZEL].val1, 0);
+ status_percent_heal(&sd->bl, 10*j, 0);
+ clif_resurrection(&sd->bl, 1);
if(battle_config.pc_invincible_time)
pc_setinvincibletimer(sd, battle_config.pc_invincible_time);
- sc_start(&sd->bl,SkillStatusChangeTable(PR_KYRIE),100,10,skill_get_time2(SL_KAIZEL,sd->sc.data[SC_KAIZEL].val1));
- status_change_end(&sd->bl,SC_KAIZEL,-1);
+ sc_start(&sd->bl,SkillStatusChangeTable(PR_KYRIE),100,10,skill_get_time2(SL_KAIZEL,j));
return 0;
}
if (sd->state.snovice_flag == 4)
{
pc_setstand(sd);
+ status_change_clear(&sd->bl,0);
clif_skill_nodamage(&sd->bl,&sd->bl,ALL_RESURRECTION,1,1);
status_percent_heal(&sd->bl, 100, 100);
clif_resurrection(&sd->bl, 1);
diff --git a/src/map/skill.c b/src/map/skill.c
index 724c915ba..b5e5dd31c 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -4940,9 +4940,9 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
break;
case NPC_INVISIBLE:
- //Have val4 passed as 2 is for "infinite cloak".
+ //Have val4 passed as 6 is for "infinite cloak" (do not end on attack/skill use).
clif_skill_nodamage(src,bl,skillid,skilllv,
- sc_start4(bl,type,100,skilllv,0,0,2,skill_get_time(skillid,skilllv)));
+ sc_start4(bl,type,100,skilllv,0,0,6,skill_get_time(skillid,skilllv)));
break;
case NPC_SIEGEMODE:
diff --git a/src/map/status.c b/src/map/status.c
index 8ee4d5780..cbabda234 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -1046,7 +1046,9 @@ int status_check_skilluse(struct block_list *src, struct block_list *target, int
case NJ_KIRIKAGE:
break;
default:
- return 0;
+ //Non players can use all skills while hidden.
+ if (!skill_num || src->type == BL_PC)
+ return 0;
}
if (sc->option&OPTION_CHASEWALK && skill_num != ST_CHASEWALK)
return 0;
@@ -5047,7 +5049,7 @@ int status_change_start(struct block_list *bl,int type,int rate,int val1,int val
if (map_flag_gvg(bl->m)) val4 *= 5;
break;
case SC_CLOAKING:
- if (!sd) //Monsters should be able to walk no penalties. [Skotlex]
+ if (!sd) //Monsters should be able to walk with no penalties. [Skotlex]
val1 = 10;
val2 = tick>0?tick:60000; //SP consumption rate.
val3 = 0;
@@ -5057,11 +5059,12 @@ int status_change_start(struct block_list *bl,int type,int rate,int val1,int val
val3+= 70+val1*3; //Speed adjustment without a wall.
//With a wall, it is val3 +25.
//val4&1 signals the presence of a wall.
- //val4&2 signals eternal cloaking (not cancelled on attack) [Skotlex]
+ //val4&2 makes cloak not end on normal attacks [Skotlex]
+ //val4&4 makes cloak not end on using skills
if (bl->type == BL_PC) //Standard cloaking.
- val4 |= battle_config.pc_cloak_check_type&3;
+ val4 |= battle_config.pc_cloak_check_type&7;
else
- val4 |= battle_config.monster_cloak_check_type&3;
+ val4 |= battle_config.monster_cloak_check_type&7;
break;
case SC_SIGHT: /* サイト/ルアフ */
case SC_RUWACH:
diff --git a/src/map/unit.c b/src/map/unit.c
index 38589b8e0..c8e4fb341 100644
--- a/src/map/unit.c
+++ b/src/map/unit.c
@@ -970,7 +970,7 @@ int unit_skilluse_id2(struct block_list *src, int target_id, int skill_num, int
ud->skilllv = skill_lv;
if(sc && sc->data[SC_CLOAKING].timer != -1 &&
- !(sc->data[SC_CLOAKING].val4&2) && skill_num != AS_CLOAKING)
+ !(sc->data[SC_CLOAKING].val4&4) && skill_num != AS_CLOAKING)
status_change_end(src,SC_CLOAKING,-1);
if(casttime > 0) {
@@ -1063,7 +1063,7 @@ int unit_skilluse_pos2( struct block_list *src, int skill_x, int skill_y, int sk
ud->skilltarget = 0;
if (sc && sc->data[SC_CLOAKING].timer != -1 &&
- !(sc->data[SC_CLOAKING].val4&2))
+ !(sc->data[SC_CLOAKING].val4&4))
status_change_end(src,SC_CLOAKING,-1);
if(casttime > 0) {