summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/map/HPMmap.c1
-rw-r--r--src/map/battle.c2
-rw-r--r--src/map/clif.c2
-rw-r--r--src/map/pc.c6
-rw-r--r--src/map/skill.c2
5 files changed, 10 insertions, 3 deletions
diff --git a/src/map/HPMmap.c b/src/map/HPMmap.c
index f3a83ff0f..3da49c3b9 100644
--- a/src/map/HPMmap.c
+++ b/src/map/HPMmap.c
@@ -13,6 +13,7 @@
#include "atcommand.h"
#include "battle.h"
#include "battleground.h"
+#include "channel.h"
#include "chat.h"
#include "chrif.h"
#include "clif.h"
diff --git a/src/map/battle.c b/src/map/battle.c
index d32a799ab..74dfde41d 100644
--- a/src/map/battle.c
+++ b/src/map/battle.c
@@ -2452,7 +2452,7 @@ int battle_calc_skillratio(int attack_type, struct block_list *src, struct block
case GN_CART_TORNADO:
{
int strbonus = bst->str;
- skillratio = 50 * skill_lv + (sd ? sd->cart_weight : battle_config.max_cart_weight) / 10 / (150 - strbonus) + 50 * (sd ? pc->checkskill(sd, GN_REMODELING_CART) : 5);
+ skillratio = 50 * skill_lv + (sd ? sd->cart_weight : battle_config.max_cart_weight) / 10 / max(150 - strbonus, 1) + 50 * (sd ? pc->checkskill(sd, GN_REMODELING_CART) : 5);
}
break;
case GN_CARTCANNON:
diff --git a/src/map/clif.c b/src/map/clif.c
index 269b72ae1..be56f06cd 100644
--- a/src/map/clif.c
+++ b/src/map/clif.c
@@ -3999,7 +3999,7 @@ void clif_getareachar_pc(struct map_session_data* sd,struct map_session_data* ds
if(dstsd->spiritball > 0)
clif->spiritball_single(sd->fd, dstsd);
- if (sd->charm_type != CHARM_TYPE_NONE && sd->charm_count > 0)
+ if (dstsd->charm_type != CHARM_TYPE_NONE && dstsd->charm_count > 0)
clif->charm_single(sd->fd, dstsd);
for( i = 0; i < dstsd->sc_display_count; i++ ) {
diff --git a/src/map/pc.c b/src/map/pc.c
index 2013bb652..f41665fad 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -9811,6 +9811,7 @@ int pc_charm_timer(int tid, int64 tick, int id, intptr_t data)
if (sd->charm_count <= 0) {
ShowError("pc_charm_timer: %d spiritcharm's available. (aid=%d cid=%d tid=%d)\n", sd->charm_count, sd->status.account_id, sd->status.char_id, tid);
sd->charm_count = 0;
+ sd->charm_type = CHARM_TYPE_NONE;
return 0;
}
@@ -9824,6 +9825,8 @@ int pc_charm_timer(int tid, int64 tick, int id, intptr_t data)
if(i != sd->charm_count)
memmove(sd->charm_timer+i, sd->charm_timer+i+1, (sd->charm_count-i)*sizeof(int));
sd->charm_timer[sd->charm_count] = INVALID_TIMER;
+ if (sd->charm_count <= 0)
+ sd->charm_type = CHARM_TYPE_NONE;
clif->spiritcharm(sd);
@@ -9868,6 +9871,7 @@ void pc_add_charm(struct map_session_data *sd, int interval, int max, int type)
memmove(sd->charm_timer+i+1, sd->charm_timer+i, (sd->charm_count-i)*sizeof(int));
sd->charm_timer[i] = tid;
sd->charm_count++;
+ sd->charm_type = type;
clif->spiritcharm(sd);
}
@@ -9911,6 +9915,8 @@ void pc_del_charm(struct map_session_data *sd, int count, int type)
sd->charm_timer[i-count] = sd->charm_timer[i];
sd->charm_timer[i] = INVALID_TIMER;
}
+ if (sd->charm_count <= 0)
+ sd->charm_type = CHARM_TYPE_NONE;
clif->spiritcharm(sd);
}
diff --git a/src/map/skill.c b/src/map/skill.c
index 55b86310e..c6ddd883d 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -13730,7 +13730,7 @@ int skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_id
break;
case KO_KAIHOU:
case KO_ZENKAI:
- if (sd->charm_type != CHARM_TYPE_NONE && sd->charm_count > 0) {
+ if (sd->charm_type == CHARM_TYPE_NONE || sd->charm_count <= 0) {
clif->skill_fail(sd,skill_id,USESKILL_FAIL_SUMMON,0);
return 0;
}