summaryrefslogtreecommitdiff
path: root/src/map
diff options
context:
space:
mode:
Diffstat (limited to 'src/map')
-rw-r--r--src/map/battle.c5
-rw-r--r--src/map/map.c3
-rw-r--r--src/map/skill.c11
3 files changed, 17 insertions, 2 deletions
diff --git a/src/map/battle.c b/src/map/battle.c
index 5df3bdc0b..39ded0982 100644
--- a/src/map/battle.c
+++ b/src/map/battle.c
@@ -1267,6 +1267,7 @@ static struct Damage battle_calc_weapon_attack(
case SG_SUN_WARM:
case SG_MOON_WARM:
case SG_STAR_WARM:
+ case NPC_BLOODDRAIN:
flag.hit = 1;
break;
case CR_SHIELDBOOMERANG:
@@ -2530,7 +2531,9 @@ struct Damage battle_calc_magic_attack(
skillratio += (100+skill_lv*10)*2/3-100;
break;
case WZ_FIREPILLAR:
- if (skill_lv <= 10)
+ if (skill_lv > 10)
+ skillratio += 100;
+ else
skillratio -= 80;
break;
case WZ_SIGHTRASHER:
diff --git a/src/map/map.c b/src/map/map.c
index 41aa35d7e..9e962a5d5 100644
--- a/src/map/map.c
+++ b/src/map/map.c
@@ -1484,6 +1484,9 @@ int map_search_freecell(struct block_list *src, int m, short *x,short *y, int rx
*x = (rx >= 0)?(rand()%rx2-rx+bx):(rand()%(map[m].xs-2)+1);
*y = (ry >= 0)?(rand()%ry2-ry+by):(rand()%(map[m].ys-2)+1);
+ if (*x == bx && *y == by)
+ continue; //Avoid picking the same target tile.
+
if (map_getcell(m,*x,*y,CELL_CHKREACH))
{
if(flag&2 && !unit_can_reach_pos(src, *x, *y, 1))
diff --git a/src/map/skill.c b/src/map/skill.c
index 02194d081..6b36c631d 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -825,7 +825,7 @@ int skillnotok(int skillid, struct map_session_data *sd)
if(!battle_config.pk_mode && skill_get_nocast (skillid) & 2)
return 1;
if(battle_config.pk_mode && skill_get_nocast (skillid) & 16)
- return 1;
+ return 1;
}
if(map_flag_gvg(sd->bl.m) && skill_get_nocast (skillid) & 4)
return 1;
@@ -5793,6 +5793,15 @@ int skill_castend_pos( int tid, unsigned int tick, int id,int data )
if(sd && !skill_check_condition(sd,ud->skillid, ud->skilllv, 1)) /* 使用条件チェック */
break;
+ if(md) {
+ md->last_thinktime=tick + (tid==-1?status_get_adelay(src):status_get_amotion(src));
+ if(md->skillidx >= 0) {
+ md->skilldelay[md->skillidx]=tick;
+ if (md->db->skill[md->skillidx].emotion >= 0)
+ clif_emotion(src, md->db->skill[md->skillidx].emotion);
+ }
+ }
+
if(battle_config.skill_log && battle_config.skill_log&src->type)
ShowInfo("Type %d, ID %d skill castend pos [id =%d, lv=%d, (%d,%d)]\n",
src->type, src->id, ud->skillid, ud->skilllv, ud->skillx, ud->skilly);