summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/map/mob.c4
-rw-r--r--src/map/pc.c6
-rw-r--r--src/map/skill.c12
-rw-r--r--src/map/skill.h2
4 files changed, 14 insertions, 10 deletions
diff --git a/src/map/mob.c b/src/map/mob.c
index 5a57472..51a83d2 100644
--- a/src/map/mob.c
+++ b/src/map/mob.c
@@ -3093,10 +3093,8 @@ int mobskill_castend_id( int tid, unsigned int tick, int id,int data )
printf("mobskill_castend_id nullpo mbl->id:%d\n",mbl->id);
return 0;
}
-
if( md->bl.type!=BL_MOB || md->bl.prev==NULL )
return 0;
-
if( md->skilltimer != tid ) // タイマIDの確認
return 0;
@@ -3335,6 +3333,7 @@ int mobskill_use_id(struct mob_data *md,struct block_list *target,int skill_idx)
range = skill_get_range(skill_id,skill_lv);
if(range < 0)
range = battle_get_range(&md->bl) - (range + 1);
+
if(!battle_check_range(&md->bl,target,range))
return 0;
@@ -4200,6 +4199,7 @@ static int mob_readskilldb(void)
}
ms->skill_id=atoi(sp[3]);
ms->skill_lv=atoi(sp[4]);
+
ms->permillage=atoi(sp[5]);
ms->casttime=atoi(sp[6]);
ms->delay=atoi(sp[7]);
diff --git a/src/map/pc.c b/src/map/pc.c
index 9703ee0..8933000 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -7090,10 +7090,12 @@ static int pc_natural_heal_sub(struct map_session_data *sd,va_list ap) {
}
if (sd->sc_data[SC_HALT_REGENERATE].timer != -1)
- return 0;
+ return 0;
if (sd->quick_regeneration_hp.amount || sd->quick_regeneration_sp.amount) {
- int hp_bonus = pc_quickregenerate_effect(&sd->quick_regeneration_hp, sd->nhealhp);
+ int hp_bonus = pc_quickregenerate_effect(&sd->quick_regeneration_hp,
+ sd->sc_data[SC_POISON].timer == -1 ?
+ sd->nhealhp : 1); // [fate] slow down when poisoned
int sp_bonus = pc_quickregenerate_effect(&sd->quick_regeneration_sp, sd->nhealsp);
pc_itemheal_effect(sd, hp_bonus, sp_bonus);
diff --git a/src/map/skill.c b/src/map/skill.c
index 40eaeaa..8a25f64 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -1075,7 +1075,7 @@ int skill_additional_effect( struct block_list* src, struct block_list *bl,int s
case NPC_SILENCEATTACK:
case NPC_STUNATTACK:
if(rand()%100 < sc_def_vit)
- skill_status_change_start(bl,sc[skillid-NPC_POISON],skilllv,0,0,0,skill_get_time2(skillid,skilllv),0);
+ skill_status_change_start(bl,sc[skillid-NPC_POISON],skilllv,0,0,0,skilllv * skilllv * 5000,0);
break;
case NPC_CURSEATTACK:
if(rand()%100 < sc_def_luk)
@@ -7965,8 +7965,9 @@ int skill_status_change_timer(int tid, unsigned int tick, int id, int data)
case SC_POISON:
if(sc_data[SC_SLOWPOISON].timer == -1) {
if( (--sc_data[type].val3) > 0) {
- int hp = battle_get_max_hp(bl);
- if(battle_get_hp(bl) > hp>>2) {
+
+ int hp = battle_get_max_hp(bl);
+ if(battle_get_hp(bl) > hp>>4) {
if(bl->type == BL_PC) {
hp = 3 + hp*3/200;
pc_heal((struct map_session_data *)bl,-hp,0);
@@ -7983,9 +7984,10 @@ int skill_status_change_timer(int tid, unsigned int tick, int id, int data)
}
}
else
- sc_data[type].timer=add_timer(1000+tick,skill_status_change_timer, bl->id, data );
+ sc_data[type].timer=add_timer(2000+tick,skill_status_change_timer, bl->id, data );
break;
- case SC_TENSIONRELAX: /* テンションリラックス */
+
+ case SC_TENSIONRELAX: /* テンションリラックス */
if(sd){ /* SPがあって、HPが満タンでなければ継続 */
if( sd->status.sp > 12 && sd->status.max_hp > sd->status.hp ){
if(sc_data[type].val2 % (sc_data[type].val1+3) ==0 ){
diff --git a/src/map/skill.h b/src/map/skill.h
index 0060878..bfbe93e 100644
--- a/src/map/skill.h
+++ b/src/map/skill.h
@@ -377,7 +377,7 @@ enum {
TF_MISS,
TF_STEAL,
TF_HIDING,
- TF_POISON,
+ TF_POISON, // 52
TF_DETOXIFY,
ALL_RESURRECTION,