|
@@ -42,6 +42,10 @@
|
|
#include <time.h>
|
|
#include <time.h>
|
|
#include <math.h>
|
|
#include <math.h>
|
|
|
|
|
|
|
|
+#ifdef __cplusplus
|
|
|
|
+extern "C" {
|
|
|
|
+#endif
|
|
|
|
+
|
|
#define SKILLUNITTIMER_INTERVAL 100
|
|
#define SKILLUNITTIMER_INTERVAL 100
|
|
#define TIMERSKILL_INTERVAL 150
|
|
#define TIMERSKILL_INTERVAL 150
|
|
|
|
|
|
@@ -240,7 +244,7 @@ static void skill_chk2(int *idx) {
|
|
#define skill_get3(id,x,var) { skill_chk(&id); if (!id) return 0; skill_chk2(&x); return var; }
|
|
#define skill_get3(id,x,var) { skill_chk(&id); if (!id) return 0; skill_chk2(&x); return var; }
|
|
|
|
|
|
// Skill DB
|
|
// Skill DB
|
|
-enum e_damage_type skill_get_hit( uint16 skill_id ) { skill_get (skill_id, skill_db[skill_id]->hit); }
|
|
|
|
|
|
+enum e_damage_type skill_get_hit( uint16 skill_id ) { skill_chk(&skill_id); if (!skill_id) return DMG_NORMAL; return static_cast<e_damage_type>(skill_db[skill_id]->hit); }
|
|
int skill_get_inf( uint16 skill_id ) { skill_get (skill_id, skill_db[skill_id]->inf); }
|
|
int skill_get_inf( uint16 skill_id ) { skill_get (skill_id, skill_db[skill_id]->inf); }
|
|
int skill_get_ele( uint16 skill_id , uint16 skill_lv ) { skill_get2 (skill_id, skill_lv, skill_db[skill_id]->element); }
|
|
int skill_get_ele( uint16 skill_id , uint16 skill_lv ) { skill_get2 (skill_id, skill_lv, skill_db[skill_id]->element); }
|
|
int skill_get_nk( uint16 skill_id ) { skill_get (skill_id, skill_db[skill_id]->nk); }
|
|
int skill_get_nk( uint16 skill_id ) { skill_get (skill_id, skill_db[skill_id]->nk); }
|
|
@@ -935,7 +939,7 @@ bool skill_isNotOk_npcRange(struct block_list *src, uint16 skill_id, uint16 skil
|
|
if (pos_x <= 0) pos_x = src->x;
|
|
if (pos_x <= 0) pos_x = src->x;
|
|
if (pos_y <= 0) pos_y = src->y;
|
|
if (pos_y <= 0) pos_y = src->y;
|
|
|
|
|
|
- return skill_check_unit_range2(src,pos_x,pos_y,skill_id,skill_lv,true);
|
|
|
|
|
|
+ return skill_check_unit_range2(src,pos_x,pos_y,skill_id,skill_lv,true) != 0;
|
|
}
|
|
}
|
|
|
|
|
|
struct s_skill_unit_layout *skill_get_unit_layout(uint16 skill_id, uint16 skill_lv, struct block_list* src, int x, int y)
|
|
struct s_skill_unit_layout *skill_get_unit_layout(uint16 skill_id, uint16 skill_lv, struct block_list* src, int x, int y)
|
|
@@ -3032,14 +3036,14 @@ void skill_attack_blow(struct block_list *src, struct block_list *dsrc, struct b
|
|
switch( skill_id ) {
|
|
switch( skill_id ) {
|
|
case LG_OVERBRAND_BRANDISH:
|
|
case LG_OVERBRAND_BRANDISH:
|
|
// Give knockback damage bonus only hits the wall. (bugreport:9096)
|
|
// Give knockback damage bonus only hits the wall. (bugreport:9096)
|
|
- if (skill_blown(dsrc,target,blewcount,dir,BLOWN_NO_KNOCKBACK_MAP|BLOWN_MD_KNOCKBACK_IMMUNE|BLOWN_TARGET_NO_KNOCKBACK|BLOWN_TARGET_BASILICA) < blewcount)
|
|
|
|
|
|
+ if (skill_blown(dsrc,target,blewcount,dir,(enum e_skill_blown)(BLOWN_NO_KNOCKBACK_MAP|BLOWN_MD_KNOCKBACK_IMMUNE|BLOWN_TARGET_NO_KNOCKBACK|BLOWN_TARGET_BASILICA)) < blewcount)
|
|
skill_addtimerskill(src, tick + status_get_amotion(src), target->id, 0, 0, LG_OVERBRAND_PLUSATK, skill_lv, BF_WEAPON, flag|SD_ANIMATION);
|
|
skill_addtimerskill(src, tick + status_get_amotion(src), target->id, 0, 0, LG_OVERBRAND_PLUSATK, skill_lv, BF_WEAPON, flag|SD_ANIMATION);
|
|
break;
|
|
break;
|
|
case SR_KNUCKLEARROW:
|
|
case SR_KNUCKLEARROW:
|
|
// Ignore knockback damage bonus if in WOE (player cannot be knocked in WOE)
|
|
// Ignore knockback damage bonus if in WOE (player cannot be knocked in WOE)
|
|
// Boss & Immune Knockback stay in place and don't get bonus damage
|
|
// Boss & Immune Knockback stay in place and don't get bonus damage
|
|
// Give knockback damage bonus only hits the wall. (bugreport:9096)
|
|
// Give knockback damage bonus only hits the wall. (bugreport:9096)
|
|
- if (skill_blown(dsrc, target, blewcount, dir_ka, BLOWN_IGNORE_NO_KNOCKBACK|BLOWN_NO_KNOCKBACK_MAP|BLOWN_MD_KNOCKBACK_IMMUNE|BLOWN_TARGET_NO_KNOCKBACK|BLOWN_TARGET_BASILICA) < blewcount)
|
|
|
|
|
|
+ if (skill_blown(dsrc, target, blewcount, dir_ka, (enum e_skill_blown)(BLOWN_IGNORE_NO_KNOCKBACK|BLOWN_NO_KNOCKBACK_MAP|BLOWN_MD_KNOCKBACK_IMMUNE|BLOWN_TARGET_NO_KNOCKBACK|BLOWN_TARGET_BASILICA)) < blewcount)
|
|
skill_addtimerskill(src, tick + 300 * ((flag&2) ? 1 : 2), target->id, 0, 0, skill_id, skill_lv, BF_WEAPON, flag|4);
|
|
skill_addtimerskill(src, tick + 300 * ((flag&2) ? 1 : 2), target->id, 0, 0, skill_id, skill_lv, BF_WEAPON, flag|4);
|
|
dir_ka = -1;
|
|
dir_ka = -1;
|
|
break;
|
|
break;
|
|
@@ -4114,7 +4118,7 @@ static int skill_timerskill(int tid, unsigned int tick, int id, intptr_t data)
|
|
}
|
|
}
|
|
if (j) {
|
|
if (j) {
|
|
i = applyeffects[rnd()%j];
|
|
i = applyeffects[rnd()%j];
|
|
- status_change_start(src, target, i, 10000, skl->skill_lv,
|
|
|
|
|
|
+ status_change_start(src, target, static_cast<sc_type>(i), 10000, skl->skill_lv,
|
|
(i == SC_BURNING ? 1000 : (i == SC_BLEEDING ? src->id : 0)),
|
|
(i == SC_BURNING ? 1000 : (i == SC_BLEEDING ? src->id : 0)),
|
|
(i == SC_BURNING ? src->id : 0), 0,
|
|
(i == SC_BURNING ? src->id : 0), 0,
|
|
(i == SC_BURNING ? 15000 : (i == SC_FREEZING ? 40000 :
|
|
(i == SC_BURNING ? 15000 : (i == SC_FREEZING ? 40000 :
|
|
@@ -5458,7 +5462,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
|
}
|
|
}
|
|
|
|
|
|
if(j == 5) { // If 5 spheres, remove last one and only do 4 actions (Official behavior)
|
|
if(j == 5) { // If 5 spheres, remove last one and only do 4 actions (Official behavior)
|
|
- status_change_end(src, spheres[4], INVALID_TIMER);
|
|
|
|
|
|
+ status_change_end(src, static_cast<sc_type>(spheres[4]), INVALID_TIMER);
|
|
j = 4;
|
|
j = 4;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -5472,7 +5476,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
|
}
|
|
}
|
|
skill_addtimerskill(src, tick + i * 200, bl->id, k, 0, subskill, skill_lv, i, flag);
|
|
skill_addtimerskill(src, tick + i * 200, bl->id, k, 0, subskill, skill_lv, i, flag);
|
|
clif_skill_nodamage(src, bl, subskill, skill_lv, 1);
|
|
clif_skill_nodamage(src, bl, subskill, skill_lv, 1);
|
|
- status_change_end(src, spheres[i], INVALID_TIMER);
|
|
|
|
|
|
+ status_change_end(src, static_cast<sc_type>(spheres[i]), INVALID_TIMER);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
@@ -5501,7 +5505,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
|
pres_skill_id = sc->data[i]->val1;
|
|
pres_skill_id = sc->data[i]->val1;
|
|
pres_skill_lv = sc->data[i]->val2;
|
|
pres_skill_lv = sc->data[i]->val2;
|
|
point = sc->data[i]->val3;
|
|
point = sc->data[i]->val3;
|
|
- status_change_end(src, (sc_type)i, INVALID_TIMER);
|
|
|
|
|
|
+ status_change_end(src, static_cast<sc_type>(i), INVALID_TIMER);
|
|
}else //something went wrong :(
|
|
}else //something went wrong :(
|
|
break;
|
|
break;
|
|
|
|
|
|
@@ -5574,7 +5578,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
|
int skele = WL_RELEASE - 5 + sc->data[spheres[i]]->val1 - WLS_FIRE; // Convert Ball Element into Skill ATK for balls
|
|
int skele = WL_RELEASE - 5 + sc->data[spheres[i]]->val1 - WLS_FIRE; // Convert Ball Element into Skill ATK for balls
|
|
// WL_SUMMON_ATK_FIRE, WL_SUMMON_ATK_WIND, WL_SUMMON_ATK_WATER, WL_SUMMON_ATK_GROUND
|
|
// WL_SUMMON_ATK_FIRE, WL_SUMMON_ATK_WIND, WL_SUMMON_ATK_WATER, WL_SUMMON_ATK_GROUND
|
|
skill_addtimerskill(src,tick+status_get_adelay(src)*i,bl->id,0,0,skele,sc->data[spheres[i]]->val3,BF_MAGIC,flag|SD_LEVEL);
|
|
skill_addtimerskill(src,tick+status_get_adelay(src)*i,bl->id,0,0,skele,sc->data[spheres[i]]->val3,BF_MAGIC,flag|SD_LEVEL);
|
|
- status_change_end(src, spheres[i], INVALID_TIMER); // Eliminate ball
|
|
|
|
|
|
+ status_change_end(src, static_cast<sc_type>(spheres[i]), INVALID_TIMER); // Eliminate ball
|
|
}
|
|
}
|
|
clif_skill_nodamage(src,bl,skill_id,0,1);
|
|
clif_skill_nodamage(src,bl,skill_id,0,1);
|
|
}
|
|
}
|
|
@@ -5848,7 +5852,8 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
|
struct elemental_data *ele = BL_CAST(BL_ELEM,src);
|
|
struct elemental_data *ele = BL_CAST(BL_ELEM,src);
|
|
struct status_change *tsc_ele = status_get_sc(&ele->bl);
|
|
struct status_change *tsc_ele = status_get_sc(&ele->bl);
|
|
sc_type type = status_skill2sc(skill_id), type2;
|
|
sc_type type = status_skill2sc(skill_id), type2;
|
|
- type2 = type-1;
|
|
|
|
|
|
+
|
|
|
|
+ type2 = static_cast<sc_type>(type - 1);
|
|
|
|
|
|
clif_skill_nodamage(src,battle_get_master(src),skill_id,skill_lv,1);
|
|
clif_skill_nodamage(src,battle_get_master(src),skill_id,skill_lv,1);
|
|
clif_skill_damage(src, src, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SKILL);
|
|
clif_skill_damage(src, src, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SKILL);
|
|
@@ -7958,7 +7963,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|
break;
|
|
break;
|
|
|
|
|
|
case TF_BACKSLIDING: //This is the correct implementation as per packet logging information. [Skotlex]
|
|
case TF_BACKSLIDING: //This is the correct implementation as per packet logging information. [Skotlex]
|
|
- skill_blown(src,bl,skill_get_blewcount(skill_id,skill_lv),unit_getdir(bl),BLOWN_IGNORE_NO_KNOCKBACK|BLOWN_DONT_SEND_PACKET);
|
|
|
|
|
|
+ skill_blown(src,bl,skill_get_blewcount(skill_id,skill_lv),unit_getdir(bl),(enum e_skill_blown)(BLOWN_IGNORE_NO_KNOCKBACK|BLOWN_DONT_SEND_PACKET));
|
|
clif_skill_nodamage(src, bl, skill_id, skill_lv, 1);
|
|
clif_skill_nodamage(src, bl, skill_id, skill_lv, 1);
|
|
clif_blown(src); // Always blow, otherwise it shows a casting animation. [Lemongrass]
|
|
clif_blown(src); // Always blow, otherwise it shows a casting animation. [Lemongrass]
|
|
break;
|
|
break;
|
|
@@ -10253,8 +10258,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
switch( skill_lv ) {// Select mode bassed on skill level used.
|
|
switch( skill_lv ) {// Select mode bassed on skill level used.
|
|
- case 2: mode = EL_MODE_ASSIST; break;
|
|
|
|
- case 3: mode = EL_MODE_AGGRESSIVE; break;
|
|
|
|
|
|
+ case 2: mode = static_cast<e_mode>(EL_MODE_ASSIST); break;
|
|
|
|
+ case 3: mode = static_cast<e_mode>(EL_MODE_AGGRESSIVE); break;
|
|
}
|
|
}
|
|
if( !elemental_change_mode(sd->ed,mode) ) {
|
|
if( !elemental_change_mode(sd->ed,mode) ) {
|
|
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
|
|
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
|
|
@@ -11783,14 +11788,14 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui
|
|
{
|
|
{
|
|
int summons[5] = { MOBID_G_MANDRAGORA, MOBID_G_HYDRA, MOBID_G_FLORA, MOBID_G_PARASITE, MOBID_G_GEOGRAPHER };
|
|
int summons[5] = { MOBID_G_MANDRAGORA, MOBID_G_HYDRA, MOBID_G_FLORA, MOBID_G_PARASITE, MOBID_G_GEOGRAPHER };
|
|
int class_ = skill_id==AM_SPHEREMINE?MOBID_MARINE_SPHERE:summons[skill_lv-1];
|
|
int class_ = skill_id==AM_SPHEREMINE?MOBID_MARINE_SPHERE:summons[skill_lv-1];
|
|
- int ai = (skill_id == AM_SPHEREMINE) ? AI_SPHERE : AI_FLORA;
|
|
|
|
|
|
+ enum mob_ai ai = (skill_id == AM_SPHEREMINE) ? AI_SPHERE : AI_FLORA;
|
|
struct mob_data *md;
|
|
struct mob_data *md;
|
|
|
|
|
|
// Correct info, don't change any of this! [celest]
|
|
// Correct info, don't change any of this! [celest]
|
|
md = mob_once_spawn_sub(src, src->m, x, y, status_get_name(src), class_, "", SZ_SMALL, ai);
|
|
md = mob_once_spawn_sub(src, src->m, x, y, status_get_name(src), class_, "", SZ_SMALL, ai);
|
|
if (md) {
|
|
if (md) {
|
|
md->master_id = src->id;
|
|
md->master_id = src->id;
|
|
- md->special_state.ai = (enum mob_ai)ai;
|
|
|
|
|
|
+ md->special_state.ai = ai;
|
|
if( md->deletetimer != INVALID_TIMER )
|
|
if( md->deletetimer != INVALID_TIMER )
|
|
delete_timer(md->deletetimer, mob_timer_delete);
|
|
delete_timer(md->deletetimer, mob_timer_delete);
|
|
md->deletetimer = add_timer (gettick() + skill_get_time(skill_id,skill_lv), mob_timer_delete, md->bl.id, 0);
|
|
md->deletetimer = add_timer (gettick() + skill_get_time(skill_id,skill_lv), mob_timer_delete, md->bl.id, 0);
|
|
@@ -14568,7 +14573,7 @@ int skill_check_pc_partner(struct map_session_data *sd, uint16 skill_id, uint16
|
|
static int c=0;
|
|
static int c=0;
|
|
static int p_sd[MAX_PARTY];
|
|
static int p_sd[MAX_PARTY];
|
|
int i;
|
|
int i;
|
|
- bool is_chorus = ( skill_get_inf2(skill_id)&INF2_CHORUS_SKILL );
|
|
|
|
|
|
+ bool is_chorus = ( skill_get_inf2(skill_id)&INF2_CHORUS_SKILL ) != 0;
|
|
|
|
|
|
if (!sd)
|
|
if (!sd)
|
|
return 0;
|
|
return 0;
|
|
@@ -16668,7 +16673,7 @@ void skill_weaponrefine(struct map_session_data *sd, int idx)
|
|
clif_upgrademessage(sd->fd, 3, material[ditem->wlv]);
|
|
clif_upgrademessage(sd->fd, 3, material[ditem->wlv]);
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
- per = status_get_refine_chance(ditem->wlv, (int)item->refine, false);
|
|
|
|
|
|
+ per = status_get_refine_chance(static_cast<refine_type>(ditem->wlv), (int)item->refine, false);
|
|
if( sd->class_&JOBL_THIRD )
|
|
if( sd->class_&JOBL_THIRD )
|
|
per += 10;
|
|
per += 10;
|
|
else
|
|
else
|
|
@@ -20008,7 +20013,7 @@ void skill_usave_trigger(struct map_session_data *sd)
|
|
struct skill_usave *sus = NULL;
|
|
struct skill_usave *sus = NULL;
|
|
struct skill_unit_group *group = NULL;
|
|
struct skill_unit_group *group = NULL;
|
|
|
|
|
|
- if (!(sus = idb_get(skillusave_db,sd->status.char_id)))
|
|
|
|
|
|
+ if (!(sus = static_cast<skill_usave *>(idb_get(skillusave_db,sd->status.char_id))))
|
|
return;
|
|
return;
|
|
|
|
|
|
if ((group = skill_unitsetting(&sd->bl, sus->skill_id, sus->skill_lv, sd->bl.x, sd->bl.y, 0)))
|
|
if ((group = skill_unitsetting(&sd->bl, sus->skill_id, sus->skill_lv, sd->bl.x, sd->bl.y, 0)))
|
|
@@ -21407,7 +21412,7 @@ static void skill_readdb(void)
|
|
int i;
|
|
int i;
|
|
const char* dbsubpath[] = {
|
|
const char* dbsubpath[] = {
|
|
"",
|
|
"",
|
|
- "/"DBIMPORT,
|
|
|
|
|
|
+ "/" DBIMPORT,
|
|
//add other path here
|
|
//add other path here
|
|
};
|
|
};
|
|
|
|
|
|
@@ -21441,24 +21446,24 @@ static void skill_readdb(void)
|
|
safesnprintf(dbsubpath2,n1,"%s%s",db_path,dbsubpath[i]);
|
|
safesnprintf(dbsubpath2,n1,"%s%s",db_path,dbsubpath[i]);
|
|
}
|
|
}
|
|
|
|
|
|
- sv_readdb(dbsubpath2, "skill_db.txt" , ',', 18, 18, -1, skill_parse_row_skilldb, i);
|
|
|
|
- sv_readdb(dbsubpath2, "skill_require_db.txt" , ',', 34, 34, -1, skill_parse_row_requiredb, i);
|
|
|
|
- sv_readdb(dbsubpath2, "skill_cast_db.txt" , ',', 7, 8, -1, skill_parse_row_castdb, i);
|
|
|
|
- sv_readdb(dbsubpath2, "skill_castnodex_db.txt", ',', 2, 3, -1, skill_parse_row_castnodexdb, i);
|
|
|
|
- sv_readdb(dbsubpath2, "skill_unit_db.txt" , ',', 8, 8, -1, skill_parse_row_unitdb, i);
|
|
|
|
- sv_readdb(dbsubpath2, "skill_nocast_db.txt" , ',', 2, 2, -1, skill_parse_row_nocastdb, i);
|
|
|
|
-
|
|
|
|
- sv_readdb(dbsubpath2, "produce_db.txt" , ',', 5, 5+2*MAX_PRODUCE_RESOURCE, MAX_SKILL_PRODUCE_DB, skill_parse_row_producedb, i);
|
|
|
|
- sv_readdb(dbsubpath1, "create_arrow_db.txt" , ',', 1+2, 1+2*MAX_ARROW_RESULT, MAX_SKILL_ARROW_DB, skill_parse_row_createarrowdb, i);
|
|
|
|
- sv_readdb(dbsubpath1, "abra_db.txt" , ',', 3, 3, MAX_SKILL_ABRA_DB, skill_parse_row_abradb, i);
|
|
|
|
- sv_readdb(dbsubpath1, "spellbook_db.txt" , ',', 3, 3, MAX_SKILL_SPELLBOOK_DB, skill_parse_row_spellbookdb, i);
|
|
|
|
- sv_readdb(dbsubpath1, "magicmushroom_db.txt" , ',', 1, 2, MAX_SKILL_MAGICMUSHROOM_DB, skill_parse_row_magicmushroomdb, i);
|
|
|
|
- sv_readdb(dbsubpath1, "skill_copyable_db.txt" , ',', 2, 4, -1, skill_parse_row_copyabledb, i);
|
|
|
|
- sv_readdb(dbsubpath1, "skill_improvise_db.txt" , ',', 2, 2, MAX_SKILL_IMPROVISE_DB, skill_parse_row_improvisedb, i);
|
|
|
|
- sv_readdb(dbsubpath1, "skill_changematerial_db.txt" , ',', 5, 5+2*MAX_SKILL_CHANGEMATERIAL_SET, MAX_SKILL_CHANGEMATERIAL_DB, skill_parse_row_changematerialdb, i);
|
|
|
|
- sv_readdb(dbsubpath1, "skill_nonearnpc_db.txt" , ',', 2, 3, -1, skill_parse_row_nonearnpcrangedb, i);
|
|
|
|
|
|
+ sv_readdb(dbsubpath2, "skill_db.txt" , ',', 18, 18, -1, skill_parse_row_skilldb, i > 0);
|
|
|
|
+ sv_readdb(dbsubpath2, "skill_require_db.txt" , ',', 34, 34, -1, skill_parse_row_requiredb, i > 0);
|
|
|
|
+ sv_readdb(dbsubpath2, "skill_cast_db.txt" , ',', 7, 8, -1, skill_parse_row_castdb, i > 0);
|
|
|
|
+ sv_readdb(dbsubpath2, "skill_castnodex_db.txt", ',', 2, 3, -1, skill_parse_row_castnodexdb, i > 0);
|
|
|
|
+ sv_readdb(dbsubpath2, "skill_unit_db.txt" , ',', 8, 8, -1, skill_parse_row_unitdb, i > 0);
|
|
|
|
+ sv_readdb(dbsubpath2, "skill_nocast_db.txt" , ',', 2, 2, -1, skill_parse_row_nocastdb, i > 0);
|
|
|
|
+
|
|
|
|
+ sv_readdb(dbsubpath2, "produce_db.txt" , ',', 5, 5+2*MAX_PRODUCE_RESOURCE, MAX_SKILL_PRODUCE_DB, skill_parse_row_producedb, i > 0);
|
|
|
|
+ sv_readdb(dbsubpath1, "create_arrow_db.txt" , ',', 1+2, 1+2*MAX_ARROW_RESULT, MAX_SKILL_ARROW_DB, skill_parse_row_createarrowdb, i > 0);
|
|
|
|
+ sv_readdb(dbsubpath1, "abra_db.txt" , ',', 3, 3, MAX_SKILL_ABRA_DB, skill_parse_row_abradb, i > 0);
|
|
|
|
+ sv_readdb(dbsubpath1, "spellbook_db.txt" , ',', 3, 3, MAX_SKILL_SPELLBOOK_DB, skill_parse_row_spellbookdb, i > 0);
|
|
|
|
+ sv_readdb(dbsubpath1, "magicmushroom_db.txt" , ',', 1, 2, MAX_SKILL_MAGICMUSHROOM_DB, skill_parse_row_magicmushroomdb, i > 0);
|
|
|
|
+ sv_readdb(dbsubpath1, "skill_copyable_db.txt" , ',', 2, 4, -1, skill_parse_row_copyabledb, i > 0);
|
|
|
|
+ sv_readdb(dbsubpath1, "skill_improvise_db.txt" , ',', 2, 2, MAX_SKILL_IMPROVISE_DB, skill_parse_row_improvisedb, i > 0);
|
|
|
|
+ sv_readdb(dbsubpath1, "skill_changematerial_db.txt" , ',', 5, 5+2*MAX_SKILL_CHANGEMATERIAL_SET, MAX_SKILL_CHANGEMATERIAL_DB, skill_parse_row_changematerialdb, i > 0);
|
|
|
|
+ sv_readdb(dbsubpath1, "skill_nonearnpc_db.txt" , ',', 2, 3, -1, skill_parse_row_nonearnpcrangedb, i > 0);
|
|
#ifdef ADJUST_SKILL_DAMAGE
|
|
#ifdef ADJUST_SKILL_DAMAGE
|
|
- sv_readdb(dbsubpath1, "skill_damage_db.txt" , ',', 4, 7, -1, skill_parse_row_skilldamage, i);
|
|
|
|
|
|
+ sv_readdb(dbsubpath1, "skill_damage_db.txt" , ',', 4, 7, -1, skill_parse_row_skilldamage, i > 0);
|
|
#endif
|
|
#endif
|
|
aFree(dbsubpath1);
|
|
aFree(dbsubpath1);
|
|
aFree(dbsubpath2);
|
|
aFree(dbsubpath2);
|
|
@@ -21489,7 +21494,7 @@ void skill_reload (void) {
|
|
*------------------------------------------*/
|
|
*------------------------------------------*/
|
|
void do_init_skill(void)
|
|
void do_init_skill(void)
|
|
{
|
|
{
|
|
- skilldb_name2id = strdb_alloc(DB_OPT_DUP_KEY|DB_OPT_RELEASE_DATA, 0);
|
|
|
|
|
|
+ skilldb_name2id = strdb_alloc((enum DBOptions)(DB_OPT_DUP_KEY|DB_OPT_RELEASE_DATA), 0);
|
|
|
|
|
|
skill_readdb();
|
|
skill_readdb();
|
|
|
|
|
|
@@ -21523,3 +21528,7 @@ void do_final_skill(void)
|
|
ers_destroy(skill_unit_ers);
|
|
ers_destroy(skill_unit_ers);
|
|
ers_destroy(skill_timer_ers);
|
|
ers_destroy(skill_timer_ers);
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+#ifdef __cplusplus
|
|
|
|
+}
|
|
|
|
+#endif
|