diff options
Diffstat (limited to 'src/map/skill-pools.cpp')
-rw-r--r-- | src/map/skill-pools.cpp | 121 |
1 files changed, 44 insertions, 77 deletions
diff --git a/src/map/skill-pools.cpp b/src/map/skill-pools.cpp index 204036d..c225ebe 100644 --- a/src/map/skill-pools.cpp +++ b/src/map/skill-pools.cpp @@ -1,37 +1,20 @@ -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <time.h> +#include "skill.hpp" -#include "../common/timer.hpp" -#include "../common/nullpo.hpp" -#include "../common/mt_rand.hpp" -#include "magic.hpp" +#include "../common/cxxstdio.hpp" #include "battle.hpp" -#include "clif.hpp" -#include "intif.hpp" -#include "itemdb.hpp" -#include "map.hpp" -#include "mob.hpp" -#include "party.hpp" #include "pc.hpp" -#include "script.hpp" -#include "skill.hpp" -#include "../common/socket.hpp" -#ifdef MEMWATCH -#include "memwatch.hpp" -#endif +#include "../poison.hpp" -int skill_pool_skills[MAX_POOL_SKILLS]; -int skill_pool_skills_size = 0; +SkillID skill_pool_skills[MAX_POOL_SKILLS]; +int skill_pool_skills_size = 0; -void skill_pool_register(int id) +void skill_pool_register(SkillID id) { if (skill_pool_skills_size + 1 >= MAX_POOL_SKILLS) { - fprintf (stderr, + FPRINTF(stderr, "Too many pool skills! Increase MAX_POOL_SKILLS and recompile."); return; } @@ -39,22 +22,14 @@ void skill_pool_register(int id) skill_pool_skills[skill_pool_skills_size++] = id; } -const char *skill_name (int skill) -{ - if (skill > 0 && skill < MAX_SKILL_DB) - return skill_names[skill].desc; - else - return NULL; -} - -int skill_pool (struct map_session_data *sd, int *skills) +int skill_pool(struct map_session_data *sd, SkillID *skills) { - int i, count = 0; + int i, count = 0; for (i = 0; count < MAX_SKILL_POOL && i < skill_pool_skills_size; i++) { - int skill_id = skill_pool_skills[i]; - if (sd->status.skill[skill_id].flags & SKILL_POOL_ACTIVATED) + SkillID skill_id = skill_pool_skills[i]; + if (bool(sd->status.skill[skill_id].flags & SkillFlags::POOL_ACTIVATED)) { if (skills) skills[count] = skill_id; @@ -65,78 +40,70 @@ int skill_pool (struct map_session_data *sd, int *skills) return count; } -void skill_pool_empty (struct map_session_data *sd) -{ - int i; - - for (i = 0; i < skill_pool_skills_size; i++) - { - int skill_id = skill_pool_skills[i]; - sd->status.skill[skill_id].flags = 0; - } -} - -int skill_pool_size (struct map_session_data *sd) +int skill_pool_size(struct map_session_data *sd) { - return skill_pool (sd, NULL); + return skill_pool(sd, NULL); } -int skill_pool_max (struct map_session_data *sd) +int skill_pool_max(struct map_session_data *sd) { - return sd->status.skill[TMW_SKILLPOOL].lv; + return sd->status.skill[SkillID::TMW_SKILLPOOL].lv; } -int skill_pool_activate (struct map_session_data *sd, int skill_id) +int skill_pool_activate(struct map_session_data *sd, SkillID skill_id) { - if (sd->status.skill[skill_id].flags & SKILL_POOL_ACTIVATED) + if (bool(sd->status.skill[skill_id].flags & SkillFlags::POOL_ACTIVATED)) return 0; // Already there - else if (sd->status.skill[skill_id].id == skill_id // knows the skill - && (skill_pool_size (sd) < skill_pool_max (sd))) + else if (sd->status.skill[skill_id].lv + && (skill_pool_size(sd) < skill_pool_max(sd))) { - sd->status.skill[skill_id].flags |= SKILL_POOL_ACTIVATED; - pc_calcstatus (sd, 0); - MAP_LOG_PC (sd, "SKILL-ACTIVATE %d %d %d", skill_id, - sd->status.skill[skill_id].lv, skill_power (sd, - skill_id)); + sd->status.skill[skill_id].flags |= SkillFlags::POOL_ACTIVATED; + pc_calcstatus(sd, 0); + MAP_LOG_PC(sd, "SKILL-ACTIVATE %d %d %d", + skill_id, sd->status.skill[skill_id].lv, + skill_power(sd, skill_id)); return 0; } return 1; // failed } -int skill_pool_is_activated (struct map_session_data *sd, int skill_id) +bool skill_pool_is_activated(struct map_session_data *sd, SkillID skill_id) { - return sd->status.skill[skill_id].flags & SKILL_POOL_ACTIVATED; + return bool(sd->status.skill[skill_id].flags & SkillFlags::POOL_ACTIVATED); } -int skill_pool_deactivate (struct map_session_data *sd, int skill_id) +int skill_pool_deactivate(struct map_session_data *sd, SkillID skill_id) { - if (sd->status.skill[skill_id].flags & SKILL_POOL_ACTIVATED) + if (bool(sd->status.skill[skill_id].flags & SkillFlags::POOL_ACTIVATED)) { - sd->status.skill[skill_id].flags &= ~SKILL_POOL_ACTIVATED; - MAP_LOG_PC (sd, "SKILL-DEACTIVATE %d", skill_id); - pc_calcstatus (sd, 0); + sd->status.skill[skill_id].flags &= ~SkillFlags::POOL_ACTIVATED; + MAP_LOG_PC(sd, "SKILL-DEACTIVATE %d", skill_id); + pc_calcstatus(sd, 0); return 0; } return 1; } -int skill_stat (int skill_id) +// Yields the stat associated with a skill. +// Returns zero if none, or SP::STR, SP::VIT, ... otherwise +static +SP skill_stat(SkillID skill_id) { return skill_db[skill_id].stat; } -int skill_power (struct map_session_data *sd, int skill_id) +int skill_power(struct map_session_data *sd, SkillID skill_id) { - int stat = skill_stat (skill_id); - int stat_value, skill_value; - int result; + SP stat = skill_stat(skill_id); + int stat_value, skill_value; + int result; - if (stat == 0 || !skill_pool_is_activated (sd, skill_id)) + if (stat == SP::ZERO || !skill_pool_is_activated(sd, skill_id)) return 0; - stat_value = battle_get_stat (stat, &(sd->bl)); + stat_value = battle_get_stat(stat, &(sd->bl)); skill_value = sd->status.skill[skill_id].lv; if ((skill_value * 10) - 1 > stat_value) @@ -149,10 +116,10 @@ int skill_power (struct map_session_data *sd, int skill_id) return result; } -int skill_power_bl (struct block_list *bl, int skill) +int skill_power_bl(struct block_list *bl, SkillID skill) { - if (bl->type == BL_PC) - return skill_power ((struct map_session_data *) bl, skill); + if (bl->type == BL::PC) + return skill_power((struct map_session_data *) bl, skill); else return 0; } |