summaryrefslogtreecommitdiff
path: root/src/map/skill.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/map/skill.c')
-rw-r--r--src/map/skill.c592
1 files changed, 266 insertions, 326 deletions
diff --git a/src/map/skill.c b/src/map/skill.c
index e03e87d22..bd274ec46 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -2751,18 +2751,18 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
BF_WEAPON,src,src,skillid,skilllv,tick,flag,BCT_ENEMY);
break;
- case MO_INVESTIGATE: /* 発勁 */
+ case MO_INVESTIGATE:
skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
if (sc && sc->data[SC_BLADESTOP].timer != -1)
status_change_end(src,SC_BLADESTOP,-1);
break;
- case RG_BACKSTAP: /* バックスタブ */
+ case RG_BACKSTAP:
{
int dir = map_calc_dir(src, bl->x, bl->y), t_dir = unit_getdir(bl);
if ((!check_distance_bl(src, bl, 0) && !map_check_dir(dir, t_dir)) || bl->type == BL_SKILL) {
if (sc && sc->data[SC_HIDING].timer != -1)
- status_change_end(src, SC_HIDING, -1); // ハイディング解除
+ status_change_end(src, SC_HIDING, -1);
skill_attack(BF_WEAPON, src, src, bl, skillid, skilllv, tick, flag);
dir = dir < 4 ? dir+4 : dir-4; // change direction [Celest]
unit_setdir(bl,dir);
@@ -2773,7 +2773,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
}
break;
- case MO_FINGEROFFENSIVE: /* 指弾 */
+ case MO_FINGEROFFENSIVE:
{
skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
if (battle_config.finger_offensive_type && sd) {
@@ -2787,7 +2787,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
}
break;
- case MO_CHAINCOMBO: /* 連打掌 */
+ case MO_CHAINCOMBO:
{
skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
if (sc && sc->data[SC_BLADESTOP].timer != -1)
@@ -2796,7 +2796,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
break;
case KN_CHARGEATK:
- case MO_EXTREMITYFIST: /* 阿修羅覇鳳拳 */
+ case MO_EXTREMITYFIST:
if (skillid == MO_EXTREMITYFIST && sc && sc->count)
{
if (sc->data[SC_EXPLOSIONSPIRITS].timer != -1)
@@ -2919,16 +2919,14 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
}
break;
- case KN_SPEARSTAB: /* スピアスタブ */
+ case KN_SPEARSTAB:
if(flag&1){
- /* 個別にダメージを与える */
if (bl->id==skill_area_temp[1])
break;
if (skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,0x0500) && !status_get_mexp(bl))
skill_blown(src,bl,skill_area_temp[2]);
} else {
int x=bl->x,y=bl->y,i,dir;
- /* まずターゲットに攻撃を加える */
dir = map_calc_dir(bl,src->x,src->y);
skill_area_temp[1] = bl->id;
skill_area_temp[2] = skill_get_blewcount(skillid,skilllv)|dir<<20;
@@ -2968,21 +2966,21 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag);
break;
- case MG_SOULSTRIKE: /* ソウルストライク */
- case NPC_DARKSTRIKE: /*闇ソウルストライク*/
- case MG_COLDBOLT: /* コールドボルト */
- case MG_FIREBOLT: /* ファイアーボルト */
- case MG_LIGHTNINGBOLT: /* ライトニングボルト */
- case WZ_EARTHSPIKE: /* アーススパイク */
- case AL_HEAL: /* ヒール */
- case AL_HOLYLIGHT: /* ホーリーライト */
- case WZ_JUPITEL: /* ユピテルサンダー */
- case NPC_DARKTHUNDER: /*闇ユピテル*/
- case NPC_MAGICALATTACK: /* MOB:魔法打撃攻撃 */
- case PR_ASPERSIO: /* アスペルシオ */
- case MG_FROSTDIVER: /* フロストダイバー */
+ case MG_SOULSTRIKE:
+ case NPC_DARKSTRIKE:
+ case MG_COLDBOLT:
+ case MG_FIREBOLT:
+ case MG_LIGHTNINGBOLT:
+ case WZ_EARTHSPIKE:
+ case AL_HEAL:
+ case AL_HOLYLIGHT:
+ case WZ_JUPITEL:
+ case NPC_DARKTHUNDER:
+ case NPC_MAGICALATTACK:
+ case PR_ASPERSIO:
+ case MG_FROSTDIVER:
case WZ_SIGHTBLASTER:
- case WZ_SIGHTRASHER: /* サイトラッシャー */
+ case WZ_SIGHTRASHER:
case NJ_KOUENKA:
case NJ_HYOUSENSOU:
case NJ_HUUJIN:
@@ -3026,17 +3024,15 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
break;
- case PR_BENEDICTIO: /* 聖体降福 */
+ case PR_BENEDICTIO:
//Should attack undead and demons. [Skotlex]
if (battle_check_undead(tstatus->race, tstatus->def_ele) || tstatus->race == RC_DEMON)
skill_attack(BF_MAGIC, src, src, bl, skillid, skilllv, tick, flag);
break;
- /* 魔法系範囲攻撃スキル */
- case MG_NAPALMBEAT: /* ナパームビート */
- case MG_FIREBALL: /* ファイヤーボール */
+ case MG_NAPALMBEAT:
+ case MG_FIREBALL:
if (flag & 1) {
- /* 個別にダメージを与える */
if (bl->id == skill_area_temp[1])
break;
if(skillid == MG_FIREBALL) //Store distance.
@@ -3047,7 +3043,6 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
skill_area_temp[1]=bl->id;
switch (skillid) {
case MG_NAPALMBEAT:
- /* ナパームビート・ナパームバルカンは分散ダメージなので敵の数を数える */
map_foreachinrange(skill_area_sub, bl,
skill_get_splash(skillid, skilllv),BL_CHAR,
src,skillid,skilllv,tick,flag|BCT_ENEMY,
@@ -3058,7 +3053,6 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
skill_area_temp[3]=bl->y;
break;
}
- /* ターゲットに攻撃を加える(スキルエフェクト表示) */
skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick, skill_area_temp[0]);
map_foreachinrange(skill_area_sub,bl,
skill_get_splash(skillid, skilllv),BL_CHAR,
@@ -3097,8 +3091,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag);
break;
- /* その他 */
- case HT_BLITZBEAT: /* ブリッツビート */
+ case HT_BLITZBEAT:
if (flag & 1) { //Invoked from map_foreachinarea, skill_area_temp[0] holds number of targets to divide damage by.
skill_attack(BF_MISC, src, src, bl, skillid, skilllv, tick, skill_area_temp[0]);
} else {
@@ -3144,7 +3137,6 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
if (sd) skill_blockpc_start (sd, skillid, (skilllv < 5 ? 10000: 15000));
break;
- /* HP吸収/HP吸収魔法 */
case NPC_BLOODDRAIN:
case NPC_ENERGYDRAIN:
{
@@ -3234,7 +3226,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
}
/*==========================================
- * スキル使用(詠唱完了、ID指定支援系)
+ *
*------------------------------------------
*/
int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, int skillid, int skilllv, unsigned int tick, int flag)
@@ -3274,7 +3266,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
return 1;
if(status_isdead(src))
return 1;
- if(src!=bl && status_isdead(bl) && skillid != ALL_RESURRECTION && skillid != PR_REDEMPTIO)
+if(src!=bl && status_isdead(bl) && skillid != ALL_RESURRECTION && skillid != PR_REDEMPTIO)
return 1;
tstatus = status_get_status_data(bl);
@@ -3290,15 +3282,11 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
case AL_HEAL:
case ALL_RESURRECTION:
case PR_ASPERSIO:
- if (battle_check_undead(tstatus->race,tstatus->def_ele)) {
+ //Apparently only player casted skills can be offensive like this.
+ if (sd && battle_check_undead(tstatus->race,tstatus->def_ele)) {
if (battle_check_target(src, bl, BCT_ENEMY) < 1) {
//Offensive heal does not works on non-enemies. [Skotlex]
- if (sd) clif_skill_fail(sd,skillid,0,0);
- return 0;
- }
- if(!sd) {
- //Prevent non-players from casting offensive heal. [Skotlex]
- clif_emotion(src, 4);
+ clif_skill_fail(sd,skillid,0,0);
return 0;
}
return skill_castend_damage_id (src, bl, skillid, skilllv, tick, flag);
@@ -3321,17 +3309,17 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
switch(skillid)
{
case HLIF_HEAL: //[orn]
- case AL_HEAL: /* ヒール */
+ case AL_HEAL:
{
int heal = skill_calc_heal(src, skilllv);
int heal_get_jobexp;
if (status_isimmune(bl) || (dstmd && dstmd->class_ == MOBID_EMPERIUM))
- heal=0; /* 黄金蟲カード(ヒール量0) */
+ heal=0;
if (sd) {
if (sd && dstsd && sd->status.partner_id == dstsd->status.char_id &&
- (sd->class_&MAPID_UPPERMASK) == MAPID_SUPER_NOVICE && sd->status.sex == 0) //自分も対象もPC、対象が自分のパートナー、自分がスパノビ、自分が♀なら
- heal = heal*2; //スパノビの嫁が旦那にヒールすると2倍になる
+ (sd->class_&MAPID_UPPERMASK) == MAPID_SUPER_NOVICE && sd->status.sex == 0)
+ heal = heal*2;
}
if (tsc && tsc->count && tsc->data[SC_KAITE].timer != -1
@@ -3347,7 +3335,6 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
heal_get_jobexp = status_heal(bl,heal,0,0);
}
- // JOB経験値獲得
if(sd && dstsd && heal > 0 && sd != dstsd && battle_config.heal_exp > 0){
heal_get_jobexp = heal_get_jobexp * battle_config.heal_exp / 100;
if (heal_get_jobexp <= 0)
@@ -3379,7 +3366,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
clif_updatestatus(sd,SP_BASEEXP);
clif_updatestatus(sd,SP_JOBEXP);
}
- status_zap(src, sstatus->hp-1, sstatus->sp-1);
+ status_set_hp(src, 1, 0);
+ status_set_sp(src, 0, 0);
break;
} else if (status_isdead(bl) && flag&1) { //Revive
skill_area_temp[0]++; //Count it in, then fall-through to the Resurrection code.
@@ -3387,7 +3375,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
} else //Invalid target, skip resurrection.
break;
- case ALL_RESURRECTION: /* リザレクション */
+ case ALL_RESURRECTION:
if(sd && map_flag_gvg(bl->m))
{ //No reviving in WoE grounds!
clif_skill_fail(sd,skillid,0,0);
@@ -3430,7 +3418,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
}
break;
- case AL_DECAGI: /* 速度減少 */
+ case AL_DECAGI:
clif_skill_nodamage (src, bl, skillid, skilllv,
sc_start(bl, type,
(40 + skilllv * 2 + (status_get_lv(src) + sstatus->int_)/5),
@@ -3452,7 +3440,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
}
break;
- case PR_LEXDIVINA: /* レックスディビーナ */
+ case PR_LEXDIVINA:
if (tsc && tsc->count && tsc->data[type].timer != -1) {
status_change_end(bl,type, -1);
clif_skill_nodamage (src, bl, skillid, skilllv, 1);
@@ -3539,7 +3527,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
break;
case SA_INSTANTDEATH:
clif_skill_nodamage(src,bl,skillid,skilllv,1);
- status_zap(bl,tstatus->hp-1,0);
+ status_set_hp(bl,1,0);
break;
case SA_QUESTION:
case SA_GRAVITY:
@@ -3547,7 +3535,6 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
break;
case SA_CLASSCHANGE:
{
- //クラスチェンジ用ボスモンスターID
static int changeclass[]={1038,1039,1046,1059,1086,1087,1112,1115
,1157,1159,1190,1272,1312,1373,1492};
int class_ = mob_random_class (changeclass,sizeof(changeclass)/sizeof(changeclass[0]));
@@ -3587,18 +3574,18 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
}
break;
- case AL_INCAGI: /* 速度増加 */
- case AL_BLESSING: /* ブレッシング */
+ case AL_INCAGI:
+ case AL_BLESSING:
case PR_SLOWPOISON:
- case PR_IMPOSITIO: /* イムポシティオマヌス */
- case PR_LEXAETERNA: /* レックスエーテルナ */
- case PR_SUFFRAGIUM: /* サフラギウム */
- case PR_BENEDICTIO: /* 聖体降福 */
+ case PR_IMPOSITIO:
+ case PR_LEXAETERNA:
+ case PR_SUFFRAGIUM:
+ case PR_BENEDICTIO:
clif_skill_nodamage(src,bl,skillid,skilllv,
sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv)));
break;
- case CR_PROVIDENCE: /* プロヴィデンス */
+ case CR_PROVIDENCE:
if(sd && dstsd){ //Check they are not another crusader [Skotlex]
if ((dstsd->class_&MAPID_UPPERMASK) == MAPID_CRUSADER) {
clif_skill_fail(sd,skillid,0,0);
@@ -3610,7 +3597,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv)));
break;
- case CG_MARIONETTE: /* マリオネットコントロール */
+ case CG_MARIONETTE:
{
struct status_change *sc= status_get_sc(src);
int type2 = SC_MARIONETTE2;
@@ -3679,7 +3666,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
}
break;
- case PR_ASPERSIO: /* アスペルシオ */
+ case PR_ASPERSIO:
if (sd && dstmd) {
clif_skill_nodamage(src,bl,skillid,skilllv,0);
break;
@@ -3716,7 +3703,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv)));
break;
- case PR_KYRIE: /* キリエエレイソン */
+ case PR_KYRIE:
clif_skill_nodamage(bl,bl,skillid,skilllv,
sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv)));
break;
@@ -3731,30 +3718,30 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
sc_start4(src,SC_WATK_ELEMENT,100,3,20,0,0,skill_get_time2(skillid, skilllv));
if (sd) skill_blockpc_start (sd, skillid, skill_get_time(skillid, skilllv));
break;
- case LK_BERSERK: /* バーサーク */
- case KN_AUTOCOUNTER: /* オートカウンター */
- case KN_TWOHANDQUICKEN: /* ツーハンドクイッケン */
+ case LK_BERSERK:
+ case KN_AUTOCOUNTER:
+ case KN_TWOHANDQUICKEN:
case KN_ONEHAND:
- case CR_SPEARQUICKEN: /* スピアクイッケン */
+ case CR_SPEARQUICKEN:
case CR_REFLECTSHIELD:
- case AS_POISONREACT: /* ポイズンリアクト */
- case MC_LOUD: /* ラウドボイス */
- case MG_ENERGYCOAT: /* エナジーコート */
- case MG_SIGHT: /* サイト */
- case AL_RUWACH: /* ルアフ */
- case MO_EXPLOSIONSPIRITS: // 爆裂波動
- case MO_STEELBODY: // 金剛
- case MO_BLADESTOP: // 白刃取り
- case LK_AURABLADE: /* オーラブレード */
- case LK_PARRYING: /* パリイング */
- case LK_CONCENTRATION: /* コンセントレーション */
- case WS_CARTBOOST: /* カートブースト */
- case SN_SIGHT: /* トゥルーサイト */
- case WS_MELTDOWN: /* メルトダウン */
+ case AS_POISONREACT:
+ case MC_LOUD:
+ case MG_ENERGYCOAT:
+ case MG_SIGHT:
+ case AL_RUWACH:
+ case MO_EXPLOSIONSPIRITS:
+ case MO_STEELBODY:
+ case MO_BLADESTOP:
+ case LK_AURABLADE:
+ case LK_PARRYING:
+ case LK_CONCENTRATION:
+ case WS_CARTBOOST:
+ case SN_SIGHT:
+ case WS_MELTDOWN:
case WS_OVERTHRUSTMAX: // Overthrust Max [Celest]
- case ST_REJECTSWORD: /* リジェクトソード */
- case HW_MAGICPOWER: /* 魔法力増幅 */
- case PF_MEMORIZE: /* メモライズ */
+ case ST_REJECTSWORD:
+ case HW_MAGICPOWER:
+ case PF_MEMORIZE:
case PA_SACRIFICE:
case ASC_EDP: // [Celest]
case NPC_STOP:
@@ -3776,7 +3763,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv)));
break;
- case CG_MOONLIT: /* 月明りの泉に落ちる花びら */
+ case CG_MOONLIT:
clif_skill_nodamage(src,bl,skillid,skilllv,1);
if (sd && battle_config.player_skill_partner_check &&
(!battle_config.gm_skilluncond || pc_isGM(sd) < battle_config.gm_skilluncond)) {
@@ -3799,7 +3786,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
}
break;
*/
- case SM_ENDURE: /* インデュア */
+ case SM_ENDURE:
clif_skill_nodamage(src,bl,skillid,skilllv,
sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv)));
if (sd)
@@ -3825,7 +3812,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv)));
break;
- case LK_TENSIONRELAX: /* テンションリラックス */
+ case LK_TENSIONRELAX:
clif_skill_nodamage(src,bl,skillid,skilllv,
sc_start4(bl,type,100,skilllv,0,0,skill_get_time2(skillid,skilllv),
skill_get_time(skillid,skilllv)));
@@ -3856,7 +3843,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
}
break;
- case AC_CONCENTRATION: /* 集中力向上 */
+ case AC_CONCENTRATION:
{
clif_skill_nodamage(src,bl,skillid,skilllv,
sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv)));
@@ -3866,9 +3853,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
}
break;
- case SM_PROVOKE: /* プロボック */
- /* MVPmobと不死には効かない */
- if((tstatus->mode&MD_BOSS) || battle_check_undead(tstatus->race,tstatus->def_ele)) { //不死には?かない
+ case SM_PROVOKE:
+ if((tstatus->mode&MD_BOSS) || battle_check_undead(tstatus->race,tstatus->def_ele)) {
map_freeblock_unlock();
return 1;
}
@@ -3901,11 +3887,9 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
}
break;
- case CR_DEVOTION: /* ディボーション */
+ case CR_DEVOTION:
if(sd && dstsd)
{
- //転生や養子の場合の元の職業を算出する
-
int lv = sd->status.base_level - dstsd->status.base_level;
if (lv < 0) lv = -lv;
if (lv > battle_config.devotion_level_difference ||
@@ -3933,14 +3917,14 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
clif_skill_fail(sd,skillid,0,0);
break;
- case MO_CALLSPIRITS: // 気功
+ case MO_CALLSPIRITS:
if(sd) {
clif_skill_nodamage(src,bl,skillid,skilllv,1);
pc_addspiritball(sd,skill_get_time(skillid,skilllv),skilllv);
}
break;
- case CH_SOULCOLLECT: // 狂気功
+ case CH_SOULCOLLECT:
if(sd) {
clif_skill_nodamage(src,bl,skillid,skilllv,1);
for (i = 0; i < 5; i++)
@@ -3962,7 +3946,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
}
break;
- case MO_ABSORBSPIRITS: // 気奪
+ case MO_ABSORBSPIRITS:
i = 0;
if (dstsd && dstsd->spiritball && (sd == dstsd || map_flag_vs(src->m)) && (dstsd->class_&MAPID_BASEMASK)!=MAPID_GUNSLINGER)
{ // split the if for readability, and included gunslingers in the check so that their coins cannot be removed [Reddozen]
@@ -3979,14 +3963,14 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
}
break;
- case AC_MAKINGARROW: /* 矢作成 */
+ case AC_MAKINGARROW:
if(sd) {
clif_arrow_create_list(sd);
clif_skill_nodamage(src,bl,skillid,skilllv,1);
}
break;
- case AM_PHARMACY: /* ポーション作成 */
+ case AM_PHARMACY:
if(sd) {
clif_skill_produce_mix_list(sd,22);
clif_skill_nodamage(src,bl,skillid,skilllv,1);
@@ -4004,16 +3988,16 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
clif_skill_nodamage(src,bl,skillid,skilllv,
sc_start(bl,SC_STUN,(20 + 10 * skilllv),skilllv,skill_get_time2(skillid,skilllv)));
break;
- case RG_RAID: /* サプライズアタック */
+ case RG_RAID:
clif_skill_nodamage(src,bl,skillid,skilllv,1);
map_foreachinrange(skill_area_sub, bl,
skill_get_splash(skillid, skilllv), BL_CHAR,
src,skillid,skilllv,tick, flag|BCT_ENEMY|1,
skill_castend_damage_id);
- status_change_end(src, SC_HIDING, -1); // ハイディング解除
+ status_change_end(src, SC_HIDING, -1);
break;
- case ASC_METEORASSAULT: /* メテオアサルト */
+ case ASC_METEORASSAULT:
case GS_SPREADATTACK:
clif_skill_nodamage(src,bl,skillid,skilllv,1);
map_foreachinrange(skill_area_sub, src,
@@ -4022,7 +4006,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
skill_castend_damage_id);
break;
- case KN_BRANDISHSPEAR: /*ブランディッシュスピア*/
+ case KN_BRANDISHSPEAR:
{
int c,n=4;
int dir = map_calc_dir(src,bl->x,bl->y);
@@ -4030,7 +4014,6 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
int x=bl->x,y=bl->y;
skill_brandishspear_first(&tc,dir,x,y);
skill_brandishspear_dir(&tc,dir,4);
- /* 範囲④ */
if(skilllv > 9){
for(c=1;c<4;c++){
map_foreachincell(skill_area_sub,
@@ -4039,7 +4022,6 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
skill_castend_damage_id);
}
}
- /* 範囲③② */
if(skilllv > 6){
skill_brandishspear_dir(&tc,dir,-1);
n--;
@@ -4060,7 +4042,6 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
}
}
}
- /* 範囲① */
for(c=0;c<10;c++){
if(c==0||c==5) skill_brandishspear_dir(&tc,dir,-1);
map_foreachincell(skill_area_sub,
@@ -4087,6 +4068,11 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
BF_MAGIC, src, src, skillid, skilllv, tick, flag, BCT_ENEMY);
break;
+ case HVAN_EXPLOSION: //[orn]
+ if(hd){
+ hd->master->homunculus.intimacy = 200;
+ clif_send_homdata(hd->master,0x100,hd->master->homunculus.intimacy/100);
+ }
case NPC_SELFDESTRUCTION:
//Self Destruction hits everyone in range (allies+enemies)
clif_skill_nodamage(src, src, skillid, -1, 1);
@@ -4096,30 +4082,15 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
skill_castend_damage_id);
status_damage(src, src, sstatus->max_hp,0,0,1);
break;
- case HVAN_EXPLOSION: //[orn]
- ShowDebug("skill_castend_nodamage_id : intimacy = %d\n", hd->master->homunculus.intimacy) ; //ORN DEBUG
- clif_skill_nodamage(src, src, skillid, -1, 1);
- map_foreachinrange(skill_area_sub, bl,
- skill_get_splash(skillid, skilllv), BL_CHAR,
- src, skillid, skilllv, tick, flag|BCT_ENEMY,
- skill_castend_damage_id);
- if(hd){
- hd->master->homunculus.intimacy = 200;
- clif_send_homdata(hd->master,0x100,hd->master->homunculus.intimacy/100);
- }
- status_damage(src, src, sstatus->max_hp,0,0,1);
- break;
- /* パーティスキル */
- case AL_ANGELUS: /* エンジェラス */
- case PR_MAGNIFICAT: /* マグニフィカート */
- case PR_GLORIA: /* グロリア */
- case SN_WINDWALK: /* ウインドウォーク */
+ case AL_ANGELUS:
+ case PR_MAGNIFICAT:
+ case PR_GLORIA:
+ case SN_WINDWALK:
if (sd == NULL || sd->status.party_id == 0 || (flag & 1)) {
clif_skill_nodamage(bl,bl,skillid,skilllv,
sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv)));
} else if (sd) {
- /* パーティ全体への処理 */
party_foreachsamemap (skill_area_sub,
sd,skill_get_splash(skillid, skilllv),
src,skillid,skilllv,tick, flag|BCT_PARTY|1,
@@ -4127,16 +4098,14 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
}
break;
- case BS_ADRENALINE: /* アドレナリンラッシュ */
+ case BS_ADRENALINE:
case BS_ADRENALINE2:
- case BS_WEAPONPERFECT: /* ウェポンパーフェクション */
- case BS_OVERTHRUST: /* オーバートラスト */
+ case BS_WEAPONPERFECT:
+ case BS_OVERTHRUST:
if (sd == NULL || sd->status.party_id == 0 || (flag & 1)) {
- /* 個別の処理 */
clif_skill_nodamage(bl,bl,skillid,skilllv,
sc_start4(bl,type,100,skilllv,(src == bl)? 1:0,0,0,skill_get_time(skillid,skilllv)));
} else if (sd) {
- /* パーティ全体への処理 */
party_foreachsamemap(skill_area_sub,
sd,skill_get_splash(skillid, skilllv),
src,skillid,skilllv,tick, flag|BCT_PARTY|1,
@@ -4190,8 +4159,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
i = sc_start(bl,type,100,skilllv,60000);
clif_skill_nodamage(src,bl,skillid,skilllv,i);
break;
- case TF_HIDING: /* ハイディング */
- case ST_CHASEWALK: /* ハイディング */
+ case TF_HIDING:
+ case ST_CHASEWALK:
if (tsc && tsc->data[type].timer != -1)
i = status_change_end(bl, type, -1);
else
@@ -4207,9 +4176,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
// a walkok packet, it will discard the walk packet! [Skotlex]
// clif_skill_nodamage(src,bl,skillid,skilllv,i);
break;
- case AS_CLOAKING: /* クローキング */
+ case AS_CLOAKING:
if(tsc && tsc->data[type].timer!=-1 )
- /* 解除する */
i = status_change_end(bl, type, -1);
else
i = sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv));
@@ -4218,18 +4186,18 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
clif_skill_fail(sd,skillid,0,0);
break;
- case BD_ADAPTATION: /* アドリブ */
+ case BD_ADAPTATION:
if(tsc && tsc->data[SC_DANCING].timer!=-1){
clif_skill_nodamage(src,bl,skillid,skilllv,1);
skill_stop_dancing(bl);
}
break;
- case BA_FROSTJOKE: /* 寒いジョーク */
- case DC_SCREAM: /* スクリーム */
+ case BA_FROSTJOKE:
+ case DC_SCREAM:
clif_skill_nodamage(src,bl,skillid,skilllv,1);
skill_addtimerskill(src,tick+2000,bl->id,src->x,src->y,skillid,skilllv,0,flag);
- if (md) { // Mobは喋れないから、スキル名を叫ばせてみる
+ if (md) {
char temp[128];
if (strlen(md->name) + strlen(skill_db[skillid].desc) > 120)
break; //Message won't fit on buffer. [Skotlex]
@@ -4239,12 +4207,12 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
break;
- case BA_PANGVOICE://パンボイス
+ case BA_PANGVOICE:
clif_skill_nodamage(src,bl,skillid,skilllv,
sc_start(bl,SC_CONFUSION,50,7,skill_get_time(skillid,skilllv)));
break;
- case DC_WINKCHARM://魅惑のウィンク
+ case DC_WINKCHARM:
if(dstsd){
clif_skill_nodamage(src,bl,skillid,skilllv,
sc_start(bl,SC_CONFUSION,30,7,skill_get_time2(skillid,skilllv)));
@@ -4260,7 +4228,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
}
break;
- case TF_STEAL: // スティール
+ case TF_STEAL:
if(sd) {
if(pc_steal_item(sd,bl))
clif_skill_nodamage(src,bl,skillid,skilllv,1);
@@ -4269,7 +4237,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
}
break;
- case RG_STEALCOIN: // スティールコイン
+ case RG_STEALCOIN:
if(sd) {
if(pc_steal_coin(sd,bl))
clif_skill_nodamage(src,bl,skillid,skilllv,1);
@@ -4278,7 +4246,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
}
break;
- case MG_STONECURSE: /* ストーンカース */
+ case MG_STONECURSE:
{
if (tstatus->mode&MD_BOSS) {
if (sd) clif_skill_fail(sd,skillid,0,0);
@@ -4310,12 +4278,12 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
}
break;
- case NV_FIRSTAID: /* 応急手当 */
+ case NV_FIRSTAID:
clif_skill_nodamage(src,bl,skillid,5,1);
status_heal(bl,5,0,0);
break;
- case AL_CURE: /* キュアー */
+ case AL_CURE:
if(status_isimmune(bl)) {
clif_skill_nodamage(src,bl,skillid,skilllv,0);
break;
@@ -4328,13 +4296,13 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
clif_skill_nodamage(src,bl,skillid,skilllv,1);
break;
- case TF_DETOXIFY: /* 解毒 */
+ case TF_DETOXIFY:
clif_skill_nodamage(src,bl,skillid,skilllv,1);
status_change_end(bl, SC_POISON , -1 );
status_change_end(bl, SC_DPOISON , -1 );
break;
- case PR_STRECOVERY: /* リカバリー */
+ case PR_STRECOVERY:
if(status_isimmune(bl)) {
clif_skill_nodamage(src,bl,skillid,skilllv,0);
break;
@@ -4356,19 +4324,19 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
mob_unlocktarget(dstmd,tick);
break;
- case WZ_ESTIMATION: /* モンスター情報 */
+ case WZ_ESTIMATION:
if(sd) {
clif_skill_nodamage(src,bl,skillid,skilllv,1);
clif_skill_estimation((struct map_session_data *)src,bl);
}
break;
- case BS_REPAIRWEAPON: /* 武器修理 */
+ case BS_REPAIRWEAPON:
if(sd && dstsd)
clif_item_repair_list(sd,dstsd);
break;
- case MC_IDENTIFY: /* アイテム鑑定 */
+ case MC_IDENTIFY:
if(sd)
clif_item_identify_list(sd);
break;
@@ -4379,7 +4347,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
clif_item_refine_list(sd);
break;
- case MC_VENDING: /* 露店開設 */
+ case MC_VENDING:
if(sd)
{ //Prevent vending of GMs with unnecessary Level to trade/drop. [Skotlex]
if ( pc_can_give_items(pc_isGM(sd)) )
@@ -4389,9 +4357,9 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
}
break;
- case AL_TELEPORT: /* テレポート */
+ case AL_TELEPORT:
if(sd) {
- if (map[bl->m].flag.noteleport) { /* テレポ禁止 */
+ if (map[bl->m].flag.noteleport) {
clif_skill_teleportmessage(sd,0);
break;
}
@@ -4419,7 +4387,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
unit_warp(bl,-1,-1,-1,3);
break;
- case AL_HOLYWATER: /* アクアベネディクタ */
+ case AL_HOLYWATER:
if(sd) {
if (skill_produce_mix(sd, skillid, 523, 0, 0, 0, 1))
clif_skill_nodamage(src,bl,skillid,skilllv,1);
@@ -4454,10 +4422,10 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
}
break;
- case RG_STRIPWEAPON: /* ストリップウェポン */
- case RG_STRIPSHIELD: /* ストリップシールド */
- case RG_STRIPARMOR: /* ストリップアーマー */
- case RG_STRIPHELM: /* ストリップヘルム */
+ case RG_STRIPWEAPON:
+ case RG_STRIPSHIELD:
+ case RG_STRIPARMOR:
+ case RG_STRIPHELM:
case ST_FULLSTRIP: // Rewritten most of the code [DracoRPG]
case GS_DISARM: // Added disarm. [Reddozen]
{
@@ -4553,7 +4521,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
/* PotionPitcher */
case AM_BERSERKPITCHER:
- case AM_POTIONPITCHER: /* ポーションピッチャー */
+ case AM_POTIONPITCHER:
{
int i,x,hp = 0,sp = 0,bonus=100;
if(sd) {
@@ -4665,7 +4633,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
skill_produce_mix(sd, skillid, 7135, 0, 0, 0, 50);
}
break;
- case SA_DISPELL: /* ディスペル */
+ case SA_DISPELL:
{
int i;
clif_skill_nodamage(src,bl,skillid,skilllv,1);
@@ -4728,7 +4696,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
status_zap(src, 0, sp);
}
break;
- case SA_SPELLBREAKER: // スペルブレイカー
+ case SA_SPELLBREAKER:
{
int sp;
if(tsc && tsc->data[SC_MAGICROD].timer != -1) {
@@ -4777,7 +4745,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
case SA_MAGICROD:
sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv));
break;
- case SA_AUTOSPELL: /* バックステップ */
+ case SA_AUTOSPELL:
clif_skill_nodamage(src,bl,skillid,skilllv,1);
if(sd)
clif_autospell(sd,skilllv);
@@ -4882,13 +4850,13 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
sc_start(bl,type,(skilllv*5),skilllv,skill_get_time2(skillid,skilllv)));
break;
- case NPC_SUICIDE: /* 自決 */
+ case NPC_SUICIDE:
clif_skill_nodamage(src,bl,skillid,skilllv,1);
status_kill(src); //When suiciding, neither exp nor drops is given.
break;
- case NPC_SUMMONSLAVE: /* 手下召喚 */
- case NPC_SUMMONMONSTER: /* MOB召喚 */
+ case NPC_SUMMONSLAVE:
+ case NPC_SUMMONMONSTER:
if(md && md->skillidx >= 0)
mob_summonslave(md,md->db->skill[md->skillidx].val,skilllv,skillid);
break;
@@ -4927,7 +4895,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
}
break;
- case NPC_RUN: //後退
+ case NPC_RUN:
{
const int mask[8][2] = {{0,-1},{1,-1},{1,0},{1,1},{0,1},{-1,1},{-1,0},{-1,-1}};
int dir = (bl == src)?unit_getdir(src):map_calc_dir(src,bl->x,bl->y); //If cast on self, run forward, else run away.
@@ -5037,7 +5005,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
status_heal(bl,0,sp,2);
}
break;
- case HT_REMOVETRAP: /* リムーブトラップ */
+ case HT_REMOVETRAP:
clif_skill_nodamage(src,bl,skillid,skilllv,1);
{
struct skill_unit *su=NULL;
@@ -5076,7 +5044,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
}
}
break;
- case HT_SPRINGTRAP: /* スプリングトラップ */
+ case HT_SPRINGTRAP:
clif_skill_nodamage(src,bl,skillid,skilllv,1);
{
struct skill_unit *su=NULL;
@@ -5105,13 +5073,13 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
}
}
break;
- case BD_ENCORE: /* アンコール */
+ case BD_ENCORE:
clif_skill_nodamage(src,bl,skillid,skilllv,1);
if(sd)
unit_skilluse_id(src,src->id,sd->skillid_dance,sd->skilllv_dance);
break;
- case AS_SPLASHER: /* ベナムスプラッシャー */
+ case AS_SPLASHER:
if(tstatus->max_hp*3/4 < tstatus->hp) {
map_freeblock_unlock();
return 1;
@@ -5500,8 +5468,6 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
}
break;
- //Until they're at right position - gs_nodamage- [Vicious]
- //Not implemented yet [Vicious]
case GS_GLITTERING:
if(sd) {
clif_skill_nodamage(src,bl,skillid,skilllv,1);
@@ -5669,8 +5635,9 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
map_freeblock_unlock();
return 0;
}
+
/*==========================================
- * スキル使用(詠唱完了、ID指定)
+ *
*------------------------------------------
*/
int skill_castend_id (int tid, unsigned int tick, int id, int data)
@@ -5780,7 +5747,6 @@ int skill_castend_id (int tid, unsigned int tick, int id, int data)
if (tid != -1 && !status_check_skilluse(src, target, ud->skillid, 1))
break;
- //沈黙や状態異常など
if(md) {
if(ud->skillid != NPC_EMOTION)//Set afterskill delay.
md->last_thinktime=tick + (tid==-1?md->status.adelay:md->status.amotion);
@@ -5847,7 +5813,7 @@ int skill_castend_id (int tid, unsigned int tick, int id, int data)
}
/*==========================================
- * スキル使用(詠唱完了、場所指定)
+ *
*------------------------------------------
*/
int skill_castend_pos (int tid, unsigned int tick, int id, int data)
@@ -5870,7 +5836,7 @@ int skill_castend_pos (int tid, unsigned int tick, int id, int data)
return 0;
}
- if( ud->skilltimer != tid ) /* タイマIDの確認 */
+ if( ud->skilltimer != tid )
{
ShowError("skill_castend_pos: Timer mismatch %d!=%d\n", ud->skilltimer, tid);
ud->skilltimer = -1;
@@ -5920,7 +5886,7 @@ int skill_castend_pos (int tid, unsigned int tick, int id, int data)
}
}
- if(sd && !skill_check_condition(sd,ud->skillid, ud->skilllv, 1)) /* 使用条件チェック */
+ if(sd && !skill_check_condition(sd,ud->skillid, ud->skilllv, 1))
break;
if(hd && !skill_check_condition_hom(hd,ud->skillid, ud->skilllv, 1)) //[orn]
@@ -5963,7 +5929,7 @@ int skill_castend_pos (int tid, unsigned int tick, int id, int data)
}
/*==========================================
- * スキル使用(詠唱完了、場所指定の実際の処理)
+ *
*------------------------------------------
*/
int skill_castend_pos2 (struct block_list *src, int x, int y, int skillid, int skilllv, unsigned int tick, int flag)
@@ -6122,7 +6088,7 @@ int skill_castend_pos2 (struct block_list *src, int x, int y, int skillid, int s
map_foreachinarea(skill_graffitiremover,src->m,x-i,y-i,x+i,y+i,BL_SKILL);
break;
- case WZ_METEOR: //メテオストーム
+ case WZ_METEOR:
{
int flag=0, area = skill_get_splash(skillid, skilllv);
short tmpx, tmpy, x1 = 0, y1 = 0;
@@ -6146,7 +6112,7 @@ int skill_castend_pos2 (struct block_list *src, int x, int y, int skillid, int s
}
break;
- case AL_WARP: /* ワープポータル */
+ case AL_WARP:
if(sd) {
clif_skill_warppoint(sd,skillid,skilllv,mapindex_id2name(sd->status.save_point.map),
(skilllv>1 && sd->status.memo_point[0].map)?mapindex_id2name(sd->status.memo_point[0].map):"",
@@ -6311,7 +6277,7 @@ int skill_castend_pos2 (struct block_list *src, int x, int y, int skillid, int s
}
/*==========================================
- * スキル使用(詠唱完了、map指定)
+ *
*------------------------------------------
*/
int skill_castend_map (struct map_session_data *sd, int skill_num, const char *map)
@@ -6330,7 +6296,6 @@ int skill_castend_map (struct map_session_data *sd, int skill_num, const char *m
skill_failed(sd);
return 0;
}
- //スキルが使えない状態異常中
if(sd->sc.count && (
sd->sc.data[SC_SILENCE].timer!=-1 ||
sd->sc.data[SC_ROKISWEIL].timer!=-1 ||
@@ -6342,7 +6307,7 @@ int skill_castend_map (struct map_session_data *sd, int skill_num, const char *m
))
return 0;
- if( skill_num != sd->menuskill_id) /* 不?ウパケットらしい */
+ if( skill_num != sd->menuskill_id)
return 0;
if (strlen(map) > MAP_NAME_LENGTH-1)
@@ -6365,7 +6330,7 @@ int skill_castend_map (struct map_session_data *sd, int skill_num, const char *m
}
switch(skill_num){
- case AL_TELEPORT: /* テレポート */
+ case AL_TELEPORT:
if(strcmp(map,"Random")==0)
pc_randomwarp(sd,3);
else if (sd->menuskill_lv > 1) //Need lv2 to be able to warp here.
@@ -6373,7 +6338,7 @@ int skill_castend_map (struct map_session_data *sd, int skill_num, const char *m
sd->status.save_point.x,sd->status.save_point.y,3);
break;
- case AL_WARP: /* ワープポータル */
+ case AL_WARP:
{
const struct point *p[4];
struct skill_unit_group *group;
@@ -6416,7 +6381,7 @@ int skill_castend_map (struct map_session_data *sd, int skill_num, const char *m
break;
}
}
- if(x==0 || y==0) { /* 不正パケット? */
+ if(x==0 || y==0) {
skill_failed(sd);
return 0;
}
@@ -6528,29 +6493,29 @@ struct skill_unit_group *skill_unitsetting (struct block_list *src, int skillid,
if (sc && !sc->count)
sc = NULL;
- switch(skillid){ /* 設定 */
+ switch(skillid){
- case MG_SAFETYWALL: /* セイフティウォール */
+ case MG_SAFETYWALL:
val2=skilllv+1;
break;
- case MG_FIREWALL: /* ファイヤーウォール */
+ case MG_FIREWALL:
if(sc && sc->data[SC_VIOLENTGALE].timer!=-1)
limit = limit*3/2;
val2=4+skilllv;
break;
- case AL_WARP: /* ワープポータル */
+ case AL_WARP:
val1=skilllv+6;
if(!(flag&1))
limit=2000;
break;
- case PR_SANCTUARY: /* サンクチュアリ */
+ case PR_SANCTUARY:
val1=(skilllv+3)*2;
val2=(skilllv>6)?777:skilllv*100;
break;
- case WZ_FIREPILLAR: /* ファイアーピラー */
+ case WZ_FIREPILLAR:
if((flag&1)!=0)
limit=1000;
val1=skilllv+2;
@@ -6564,16 +6529,16 @@ struct skill_unit_group *skill_unitsetting (struct block_list *src, int skillid,
case NJ_SUITON:
skill_clear_group(src,1);
break;
- case HT_SHOCKWAVE: /* ショックウェーブトラップ */
+ case HT_SHOCKWAVE:
val1=skilllv*15+10;
- case HT_SANDMAN: /* サンドマン */
- case HT_CLAYMORETRAP: /* クレイモアートラップ */
- case HT_SKIDTRAP: /* スキッドトラップ */
- case HT_LANDMINE: /* ランドマイン */
- case HT_ANKLESNARE: /* アンクルスネア */
- case HT_FLASHER: /* フラッシャー */
- case HT_FREEZINGTRAP: /* フリージングトラップ */
- case HT_BLASTMINE: /* ブラストマイン */
+ case HT_SANDMAN:
+ case HT_CLAYMORETRAP:
+ case HT_SKIDTRAP:
+ case HT_LANDMINE:
+ case HT_ANKLESNARE:
+ case HT_FLASHER:
+ case HT_FREEZINGTRAP:
+ case HT_BLASTMINE:
if (map_flag_gvg(src->m))
limit *= 4; // longer trap times in WOE [celest]
if (battle_config.vs_traps_bctall && map_flag_vs(src->m)
@@ -6581,7 +6546,7 @@ struct skill_unit_group *skill_unitsetting (struct block_list *src, int skillid,
target = BCT_ALL;
break;
- case SA_LANDPROTECTOR: /* ランドプロテクター */
+ case SA_LANDPROTECTOR:
{
int aoe_diameter; // -- aoe_diameter (moonsoul) added for sage Area Of Effect skills
val1=skilllv*15+10;
@@ -6755,11 +6720,11 @@ struct skill_unit_group *skill_unitsetting (struct block_list *src, int skillid,
ux = x + layout->dx[i];
uy = y + layout->dy[i];
switch (skillid) {
- case MG_FIREWALL: /* ファイヤーウォール */
+ case MG_FIREWALL:
case NJ_KAENSIN:
val2=group->val2;
break;
- case WZ_ICEWALL: /* アイスウォール */
+ case WZ_ICEWALL:
if(skilllv <= 1)
val1 = 500;
else
@@ -6776,7 +6741,6 @@ struct skill_unit_group *skill_unitsetting (struct block_list *src, int skillid,
}
break;
}
- //直上スキルの場合設置座標上にランドプロテクターがないかチェック
if(range<=0)
map_foreachincell(skill_landprotector,src->m,ux,uy,BL_SKILL,skillid,&alive, src);
@@ -6816,7 +6780,7 @@ struct skill_unit_group *skill_unitsetting (struct block_list *src, int skillid,
}
/*==========================================
- * スキルユニットの発動イベント
+ *
*------------------------------------------
*/
int skill_unit_onplace (struct skill_unit *src, struct block_list *bl, unsigned int tick)
@@ -6942,7 +6906,7 @@ int skill_unit_onplace (struct skill_unit *src, struct block_list *bl, unsigned
}
/*==========================================
- * スキルユニットの発動イベント(タイマー発動)
+ *
*------------------------------------------
*/
int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, unsigned int tick)
@@ -7011,7 +6975,6 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
return 0;
ts->tick = tick+sg->interval;
- // GXは重なっていたら3HITしない
if ((skillid==CR_GRANDCROSS || skillid==NPC_GRANDDARKNESS) && !battle_config.gx_allhit)
ts->tick += sg->interval*(map_count_oncell(bl->m,bl->x,bl->y,BL_CHAR)-1);
}
@@ -7045,7 +7008,8 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
}
case UNT_SANCTUARY:
- if (battle_check_undead(tstatus->race, tstatus->def_ele) || tstatus->race==RC_DEMON)
+ //Only player casted Sanctuaries will do offensive heal.
+ if (sd && (battle_check_undead(tstatus->race, tstatus->def_ele) || tstatus->race==RC_DEMON))
{ //Only damage enemies with offensive Sanctuary. [Skotlex]
if(battle_check_target(&src->bl,bl,BCT_ENEMY)>0 &&
skill_attack(BF_MAGIC, ss, &src->bl, bl, sg->skill_id, sg->skill_lv, tick, 0))
@@ -7169,14 +7133,14 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
break;
case UNT_TALKIEBOX:
- if (sg->src_id == bl->id) //自分が踏んでも発動しない
+ if (sg->src_id == bl->id)
break;
if (sg->val2 == 0){
clif_talkiebox(&src->bl, sg->valstr);
sg->unit_id = UNT_USED_TRAPS;
clif_changetraplook(&src->bl, UNT_USED_TRAPS);
sg->limit = DIFF_TICK(tick, sg->tick) + 5000;
- sg->val2 = -1; //踏んだ
+ sg->val2 = -1;
sg->state.into_abyss = 1; //Prevent Remove Trap from giving you the trap back. [Skotlex]
}
break;
@@ -7188,7 +7152,7 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
break;
case UNT_UGLYDANCE: //Ugly Dance [Skotlex]
- if (ss->id != bl->id && bl->type == BL_PC)
+ if (ss->id != bl->id)
skill_additional_effect(ss, bl, sg->skill_id, sg->skill_lv, BF_LONG|BF_SKILL|BF_MISC, tick);
if (sg->state.song_dance && src->val2&UF_ENSEMBLE)
{ //Restore values.
@@ -7344,7 +7308,7 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
return skillid;
}
/*==========================================
- * スキルユニットから離脱する(もしくはしている)場合
+ *
*------------------------------------------
*/
int skill_unit_onout (struct skill_unit *src, struct block_list *bl, unsigned int tick)
@@ -7377,7 +7341,7 @@ int skill_unit_onout (struct skill_unit *src, struct block_list *bl, unsigned in
status_change_end(bl,type,-1);
break;
- case UNT_SPIDERWEB: /* スパイダーウェッブ */
+ case UNT_SPIDERWEB:
{
struct block_list *target = map_id2bl(sg->val2);
if (target && target==bl)
@@ -7520,7 +7484,7 @@ int skill_unit_effect (struct block_list *bl, va_list ap)
}
/*==========================================
- * スキルユニットの限界イベント
+ *
*------------------------------------------
*/
int skill_unit_onlimit (struct skill_unit *src, unsigned int tick)
@@ -7534,10 +7498,10 @@ int skill_unit_onlimit (struct skill_unit *src, unsigned int tick)
skill_unitsetting(&src->bl,sg->skill_id,sg->skill_lv,src->bl.x,src->bl.y,1);
break;
- case UNT_ICEWALL: /* アイスウォール */
+ case UNT_ICEWALL:
clif_changemapcell(src->bl.m,src->bl.x,src->bl.y,src->val2,1);
break;
- case UNT_CALLFAMILY: /* あなたに会いたい */
+ case UNT_CALLFAMILY:
{
struct map_session_data *sd = NULL;
if(sg->val1) {
@@ -7566,7 +7530,7 @@ int skill_unit_onlimit (struct skill_unit *src, unsigned int tick)
return 0;
}
/*==========================================
- * スキルユニットのダメージイベント
+ *
*------------------------------------------
*/
int skill_unit_ondamaged (struct skill_unit *src, struct block_list *bl, int damage, unsigned int tick)
@@ -7626,7 +7590,7 @@ static void skill_moonlit (struct block_list* src, struct block_list* partner, i
}
/*==========================================
- * 範囲内キャラ存在確認判定処理(foreachinarea)
+ *
*------------------------------------------
*/
@@ -7662,7 +7626,7 @@ static int skill_check_condition_char_sub (struct block_list *bl, va_list ap)
switch(skillid)
{
- case PR_BENEDICTIO: /* 聖体降福 */
+ case PR_BENEDICTIO:
{
int dir = map_calc_dir(&sd->bl,tsd->bl.x,tsd->bl.y);
dir = (unit_getdir(&sd->bl) + dir)%8; //This adjusts dir to account for the direction the sd is facing.
@@ -7749,7 +7713,7 @@ int skill_check_pc_partner (struct map_session_data *sd, int skill_id, int* skil
}
/*==========================================
- * 範囲内バイオプラント、スフィアマイン用Mob存在確認判定処理(foreachinarea)
+ *
*------------------------------------------
*/
@@ -7847,7 +7811,7 @@ int skill_check_condition (struct map_session_data *sd, int skill, int lv, int t
return 0;
}
- if(sd->skillitem == skill) { /* アイテムの場合無条件成功 */
+ if(sd->skillitem == skill) {
if(!type) //When a target was selected
{ //Consume items that were skipped in pc_use_item [Skotlex]
if((i = sd->itemindex) == -1 ||
@@ -7884,10 +7848,10 @@ int skill_check_condition (struct map_session_data *sd, int skill, int lv, int t
//Code speedup, rather than using skill_get_* over and over again.
if (lv < 1 || lv > MAX_SKILL_LEVEL)
return 0;
- hp = skill_db[j].hp[lv-1]; /* 消費HP */
- sp = skill_db[j].sp[lv-1]; /* 消費SP */
+ hp = skill_db[j].hp[lv-1];
+ sp = skill_db[j].sp[lv-1];
if((sd->skillid_old == BD_ENCORE) && skill == sd->skillid_dance)
- sp=sp/2; //アンコール時はSP消費が半分
+ sp=sp/2;
hp_rate = skill_db[j].hp_rate[lv-1];
sp_rate = skill_db[j].sp_rate[lv-1];
zeny = skill_db[j].zeny[lv-1];
@@ -7896,7 +7860,7 @@ int skill_check_condition (struct map_session_data *sd, int skill, int lv, int t
ammo_qty = skill_db[j].ammo_qty[lv-1];
state = skill_db[j].state;
spiritball = skill_db[j].spiritball[lv-1];
- mhp = skill_db[j].mhp[lv-1]; /* 消費HP */
+ mhp = skill_db[j].mhp[lv-1];
for(i = 0; i < 10; i++) {
itemid[i] = skill_db[j].itemid[i];
amount[i] = skill_db[j].amount[i];
@@ -7955,7 +7919,7 @@ int skill_check_condition (struct map_session_data *sd, int skill, int lv, int t
}
if(sd->dsprate!=100)
- sp=sp*sd->dsprate/100; /* 消費SP修正 */
+ sp=sp*sd->dsprate/100;
switch(skill) {
case SA_CASTCANCEL:
@@ -7986,13 +7950,13 @@ int skill_check_condition (struct map_session_data *sd, int skill, int lv, int t
return 0;
}
break;
- case MO_CALLSPIRITS: /* 気功 */
+ case MO_CALLSPIRITS:
if(sd->spiritball >= lv) {
clif_skill_fail(sd,skill,0,0);
return 0;
}
break;
- case CH_SOULCOLLECT: /* 狂気功 */
+ case CH_SOULCOLLECT:
if(sd->spiritball >= 5) {
clif_skill_fail(sd,skill,0,0);
return 0;
@@ -8010,7 +7974,7 @@ int skill_check_condition (struct map_session_data *sd, int skill, int lv, int t
if (sc && sc->data[SC_EXPLOSIONSPIRITS].timer!=-1)
spiritball = 0;
break;
- case MO_CHAINCOMBO: //連打掌
+ case MO_CHAINCOMBO:
if(!sc)
return 0;
if(sc->data[SC_BLADESTOP].timer!=-1)
@@ -8117,7 +8081,7 @@ int skill_check_condition (struct map_session_data *sd, int skill, int lv, int t
}
}
break;
- case PR_BENEDICTIO: /* 聖体降福 */
+ case PR_BENEDICTIO:
{
if (!battle_config.player_skill_partner_check ||
(battle_config.gm_skilluncond && pc_isGM(sd) >= battle_config.gm_skilluncond)
@@ -8138,8 +8102,8 @@ int skill_check_condition (struct map_session_data *sd, int skill, int lv, int t
}
}
break;
- case AM_CANNIBALIZE: /* バイオプラント */
- case AM_SPHEREMINE: /* スフィアーマイン */
+ case AM_CANNIBALIZE:
+ case AM_SPHEREMINE:
if(type&1){
int c=0;
int summons[5] = { 1020, 1068, 1118, 1500, 1368 };
@@ -8285,7 +8249,6 @@ int skill_check_condition (struct map_session_data *sd, int skill, int lv, int t
}
break;
- //Until they're at right position - gs_skillcheck- [Vicious]
case GS_GLITTERING:
if(sd->spiritball >= 10) {
clif_skill_fail(sd,skill,0,0);
@@ -8344,7 +8307,7 @@ int skill_check_condition (struct map_session_data *sd, int skill, int lv, int t
}
}
if( spiritball > 0 && sd->spiritball < spiritball) {
- clif_skill_fail(sd,skill,0,0); // 氣球不足
+ clif_skill_fail(sd,skill,0,0);
return 0;
}
}
@@ -8482,7 +8445,7 @@ int skill_check_condition (struct map_session_data *sd, int skill, int lv, int t
if(delitem_flag) {
for(i=0;i<10;i++) {
if(index[i] >= 0)
- pc_delitem(sd,index[i],amount[i],0); // アイテム消費
+ pc_delitem(sd,index[i],amount[i],0);
}
// Ammo is now reduced in battle_calc_weapon_attack. [Skotlex]
// if (ammo && battle_config.arrow_decrement)
@@ -8496,14 +8459,14 @@ int skill_check_condition (struct map_session_data *sd, int skill, int lv, int t
status_zap(&sd->bl, hp, sp);
if(zeny > 0) // Zeny消費
pc_payzeny(sd,zeny);
- if(spiritball > 0) // 氣球消費
+ if(spiritball > 0)
pc_delspiritball(sd,spiritball,0);
return 1;
}
/*==========================================
- * 詠唱時間計算
+ *
*------------------------------------------
*/
int skill_castfix (struct block_list *bl, int skill_id, int skill_lv)
@@ -8568,7 +8531,7 @@ int skill_castfix_sc (struct block_list *bl, int time)
}
/*==========================================
- * ディレイ計算
+ *
*------------------------------------------
*/
int skill_delayfix (struct block_list *bl, int skill_id, int skill_lv)
@@ -8606,7 +8569,7 @@ int skill_delayfix (struct block_list *bl, int skill_id, int skill_lv)
time = time * battle_config.delay_rate / 100;
if (!(delaynodex&2))
- { /* ブラギの詩 */
+ {
struct status_change *sc;
sc= status_get_sc(bl);
if (sc && sc->count) {
@@ -8631,7 +8594,7 @@ int skill_delayfix (struct block_list *bl, int skill_id, int skill_lv)
}
/*=========================================
- * ブランディッシュスピア 初期範囲決定
+ *
*----------------------------------------
*/
void skill_brandishspear_first (struct square *tc, int dir, int x, int y)
@@ -8738,7 +8701,7 @@ void skill_brandishspear_first (struct square *tc, int dir, int x, int y)
}
/*=========================================
- * ブランディッシュスピア 方向判定 範囲拡張
+ *
*-----------------------------------------
*/
void skill_brandishspear_dir (struct square *tc, int dir, int are)
@@ -8902,7 +8865,7 @@ void skill_weaponrefine (struct map_session_data *sd, int idx)
}
/*==========================================
- * オートスペル
+ *
*------------------------------------------
*/
int skill_autospell (struct map_session_data *sd, int skillid)
@@ -8946,7 +8909,7 @@ int skill_autospell (struct map_session_data *sd, int skillid)
}
/*==========================================
- * ギャングスターパラダイス判定処理(foreachinarea)
+ *
*------------------------------------------
*/
@@ -8987,15 +8950,15 @@ int skill_gangsterparadise (struct map_session_data *sd, int type)
return 0;
range = skill_get_splash(RG_GANGSTER, range);
- if(type==1) {/* 座った時の処理 */
+ if(type==1) {
if (map_foreachinrange(skill_gangster_count,&sd->bl, range, BL_PC) > 1)
- { /*ギャングスター成功したら自分にもギャングスター属性付与*/
+ {
map_foreachinrange(skill_gangster_in,&sd->bl, range, BL_PC);
sd->state.gangsterparadise = 1;
}
return 0;
}
- else if(type==0) {/* 立ち上がったときの処理 */
+ else if(type==0) {
if (map_foreachinrange(skill_gangster_count,&sd->bl, range, BL_PC) < 2)
map_foreachinrange(skill_gangster_out,&sd->bl, range, BL_PC);
sd->state.gangsterparadise = 0;
@@ -9072,7 +9035,7 @@ int skill_rest(struct map_session_data *sd, int type)
return 0;
}
/*==========================================
- * 寒いジョーク・スクリーム判定処理(foreachinarea)
+ *
*------------------------------------------
*/
int skill_frostjoke_scream (struct block_list *bl, va_list ap)
@@ -9090,9 +9053,7 @@ int skill_frostjoke_scream (struct block_list *bl, va_list ap)
if(skilllv <= 0) return 0;
tick=va_arg(ap,unsigned int);
- if (src == bl || //自分には?かない
- bl->prev == NULL ||
- status_isdead(bl))
+ if (src == bl || status_isdead(bl))
return 0;
if (bl->type == BL_PC) {
struct map_session_data *sd = (struct map_session_data *)bl;
@@ -9109,7 +9070,7 @@ int skill_frostjoke_scream (struct block_list *bl, va_list ap)
}
/*==========================================
- * バジリカのセルを設定する
+ *
*------------------------------------------
*/
void skill_unitsetmapcell (struct skill_unit *src, int skill_num, int skill_lv, int flag)
@@ -9270,7 +9231,7 @@ int skill_greed (struct block_list *bl, va_list ap)
}
/*==========================================
- * ランドプロテクターチェック(foreachinarea)
+ *
*------------------------------------------
*/
int skill_landprotector (struct block_list *bl, va_list ap)
@@ -9340,7 +9301,7 @@ int skill_ganbatein (struct block_list *bl, va_list ap)
}
/*==========================================
- * LXÕ^[QbgύX
+ *
*------------------------------------------
*/
int skill_chastle_mob_changetarget(struct block_list *bl,va_list ap)
@@ -9368,7 +9329,7 @@ int skill_count_target (struct block_list *bl, va_list ap)
return 0;
}
/*==========================================
- * トラップ範囲処理(foreachinarea)
+ *
*------------------------------------------
*/
int skill_trap_splash (struct block_list *bl, va_list ap)
@@ -9411,7 +9372,7 @@ int skill_trap_splash (struct block_list *bl, va_list ap)
}
/*==========================================
- * ステータス異常
+ *
*------------------------------------------
*/
int skill_enchant_elemental_end (struct block_list *bl, int type)
@@ -9482,13 +9443,12 @@ int skill_check_cloaking(struct block_list *bl, struct status_change *sc)
/*
*----------------------------------------------------------------------------
- * スキルユニット
+ *
*----------------------------------------------------------------------------
*/
/*==========================================
- * 演奏/ダンスをやめる
- * flag 1で合奏中なら相方にユニットを任せる
+ *
*
*------------------------------------------
*/
@@ -9526,7 +9486,7 @@ void skill_stop_dancing (struct block_list *src)
}
/*==========================================
- * スキルユニット初期化
+ *
*------------------------------------------
*/
struct skill_unit *skill_initunit (struct skill_unit_group *group, int idx, int x, int y, int val1, int val2)
@@ -9577,7 +9537,7 @@ struct skill_unit *skill_initunit (struct skill_unit_group *group, int idx, int
}
/*==========================================
- * スキルユニット削除
+ *
*------------------------------------------
*/
int skill_delunit (struct skill_unit *unit)
@@ -9589,13 +9549,11 @@ int skill_delunit (struct skill_unit *unit)
return 0;
nullpo_retr(0, group=unit->group);
- /* onlimitイベント呼び出し */
skill_unit_onlimit( unit,gettick() );
if (group->state.song_dance) //Restore dissonance effect.
skill_dance_overlap(unit, 0);
- /* ondeleteイベント呼び出し */
if (!unit->range) {
map_foreachincell(skill_unit_effect,unit->bl.m,
unit->bl.x,unit->bl.y,group->bl_flag,&unit->bl,gettick(),4);
@@ -9630,7 +9588,7 @@ int skill_delunit (struct skill_unit *unit)
return 0;
}
/*==========================================
- * スキルユニットグループ初期化
+ *
*------------------------------------------
*/
static int skill_unit_group_newid = MAX_SKILL_DB;
@@ -9694,7 +9652,6 @@ struct skill_unit_group *skill_initunitgroup (struct block_list *src, int count,
sd->skilllv_dance=skilllv;
}
sc_start4(src,SC_DANCING,100,skillid,(int)group,0,(i&UF_ENSEMBLE?BCT_SELF:0),skill_get_time(skillid,skilllv)+1000);
- //合奏スキルは相方をダンス状態にする
if (sd && i&UF_ENSEMBLE &&
battle_config.player_skill_partner_check &&
(!battle_config.gm_skilluncond || pc_isGM(sd) < battle_config.gm_skilluncond)
@@ -9706,7 +9663,7 @@ struct skill_unit_group *skill_initunitgroup (struct block_list *src, int count,
}
/*==========================================
- * スキルユニットグループ削除
+ *
*------------------------------------------
*/
int skill_delunitgroup (struct block_list *src, struct skill_unit_group *group)
@@ -9782,7 +9739,7 @@ int skill_delunitgroup (struct block_list *src, struct skill_unit_group *group)
}
/*==========================================
- * スキルユニットグループ全削除
+ *
*------------------------------------------
*/
int skill_clear_unitgroup (struct block_list *src)
@@ -9797,7 +9754,7 @@ int skill_clear_unitgroup (struct block_list *src)
}
/*==========================================
- * スキルユニットグループの被影響tick検索
+ *
*------------------------------------------
*/
struct skill_unit_group_tickset *skill_unitgrouptickset_search (struct block_list *bl, struct skill_unit_group *group, int tick)
@@ -9841,7 +9798,7 @@ struct skill_unit_group_tickset *skill_unitgrouptickset_search (struct block_lis
}
/*==========================================
- * スキルユニットタイマー発動処理用(foreachinarea)
+ *
*------------------------------------------
*/
int skill_unit_timer_sub_onplace (struct block_list *bl, va_list ap)
@@ -9873,7 +9830,7 @@ int skill_unit_timer_sub_onplace (struct block_list *bl, va_list ap)
}
/*==========================================
- * スキルユニットタイマー処理用(foreachobject)
+ *
*------------------------------------------
*/
int skill_unit_timer_sub (struct block_list *bl, va_list ap)
@@ -9893,7 +9850,6 @@ int skill_unit_timer_sub (struct block_list *bl, va_list ap)
nullpo_retr(0, group);
- /* onplace_timerイベント呼び出し */
if (unit->range>=0 && group->interval!=-1) {
if (battle_config.skill_wall_check)
map_foreachinshootrange(skill_unit_timer_sub_onplace, bl, unit->range,
@@ -9904,7 +9860,7 @@ int skill_unit_timer_sub (struct block_list *bl, va_list ap)
if (!unit->alive)
return 0;
}
- /* 時間切れ削除 */
+
if((DIFF_TICK(tick,group->tick)>=group->limit || DIFF_TICK(tick,group->tick)>=unit->limit)){
switch(group->unit_id){
case UNT_BLASTMINE:
@@ -9932,7 +9888,7 @@ int skill_unit_timer_sub (struct block_list *bl, va_list ap)
memset(&item_tmp,0,sizeof(item_tmp));
item_tmp.nameid=1065;
item_tmp.identify=1;
- map_addflooritem(&item_tmp,1,bl->m,bl->x,bl->y,NULL,NULL,NULL,0); // 罠返還
+ map_addflooritem(&item_tmp,1,bl->m,bl->x,bl->y,NULL,NULL,NULL,0);
}
}
skill_delunit(unit);
@@ -9964,7 +9920,7 @@ int skill_unit_timer_sub (struct block_list *bl, va_list ap)
return 0;
}
/*==========================================
- * スキルユニットタイマー処理
+ *
*------------------------------------------
*/
int skill_unit_timer (int tid, unsigned int tick, int id, int data)
@@ -9979,7 +9935,7 @@ int skill_unit_timer (int tid, unsigned int tick, int id, int data)
}
/*==========================================
- * スキルユニット移動時処理用(foreachinarea)
+ *
*------------------------------------------
*/
int skill_unit_move_sub (struct block_list *bl, va_list ap)
@@ -10026,7 +9982,6 @@ int skill_unit_move_sub (struct block_list *bl, va_list ap)
}
if (flag&4)
skill_unit_onleft(skill_id,target,tick);
-
return 1;
}
@@ -10066,8 +10021,7 @@ int skill_unit_move (struct block_list *bl, unsigned int tick, int flag)
}
/*==========================================
- * スキルユニット自体の移動時処理
- * 引数はグループと移動量
+ *
*------------------------------------------
*/
int skill_unit_move_unit_group (struct skill_unit_group *group, int m, int dx, int dy)
@@ -10087,8 +10041,7 @@ int skill_unit_move_unit_group (struct skill_unit_group *group, int m, int dx, i
if (skill_get_unit_flag(group->skill_id)&UF_ENSEMBLE) //Ensembles may not be moved around.
return 0;
- m_flag = (int *) aMalloc(sizeof(int)*group->unit_count);
- memset(m_flag,0,sizeof(int)*group->unit_count);
+ m_flag = (int *) aCalloc(group->unit_count, sizeof(int));
// m_flag
// 0: Neither of the following (skill_unit_onplace & skill_unit_onout are needed)
// 1: Unit will move to a slot that had another unit of the same group (skill_unit_onplace not needed)
@@ -10159,12 +10112,12 @@ int skill_unit_move_unit_group (struct skill_unit_group *group, int m, int dx, i
}
/*----------------------------------------------------------------------------
- * アイテム合成
+ *
*----------------------------------------------------------------------------
*/
/*==========================================
- * アイテム合成可能判定
+ *
*------------------------------------------
*/
int skill_can_produce_mix (struct map_session_data *sd, int nameid, int trigger, int qty)
@@ -10180,7 +10133,7 @@ int skill_can_produce_mix (struct map_session_data *sd, int nameid, int trigger,
if(skill_produce_db[i].nameid == nameid )
break;
}
- if( i >= MAX_SKILL_PRODUCE_DB ) /* データベースにない */
+ if( i >= MAX_SKILL_PRODUCE_DB )
return 0;
if(trigger>=0){
@@ -10196,11 +10149,11 @@ int skill_can_produce_mix (struct map_session_data *sd, int nameid, int trigger,
}
}
if( (j=skill_produce_db[i].req_skill)>0 && pc_checkskill(sd,j)<=0 )
- return 0; /* スキルが足りない */
+ return 0;
for(j=0;j<MAX_PRODUCE_RESOURCE;j++){
int id,x,y;
- if( (id=skill_produce_db[i].mat_id[j]) <= 0 ) /* これ以上は材料要らない */
+ if( (id=skill_produce_db[i].mat_id[j]) <= 0 )
continue;
if(skill_produce_db[i].mat_amount[j] <= 0) {
if(pc_search_inventory(sd,id) < 0)
@@ -10210,7 +10163,7 @@ int skill_can_produce_mix (struct map_session_data *sd, int nameid, int trigger,
for(y=0,x=0;y<MAX_INVENTORY;y++)
if( sd->status.inventory[y].nameid == id )
x+=sd->status.inventory[y].amount;
- if(x<qty*skill_produce_db[i].mat_amount[j]) /* アイテムが足りない */
+ if(x<qty*skill_produce_db[i].mat_amount[j])
return 0;
}
}
@@ -10218,7 +10171,7 @@ int skill_can_produce_mix (struct map_session_data *sd, int nameid, int trigger,
}
/*==========================================
- * アイテム合成可能判定
+ *
*------------------------------------------
*/
int skill_produce_mix (struct map_session_data *sd, int skill_id, int nameid, int slot1, int slot2, int slot3, int qty)
@@ -10230,7 +10183,7 @@ int skill_produce_mix (struct map_session_data *sd, int skill_id, int nameid, in
nullpo_retr(0, sd);
status = status_get_status_data(&sd->bl);
- if( !(idx=skill_can_produce_mix(sd,nameid,-1, qty)) ) /* 条件不足 */
+ if( !(idx=skill_can_produce_mix(sd,nameid,-1, qty)) )
return 0;
idx--;
@@ -10244,13 +10197,12 @@ int skill_produce_mix (struct map_session_data *sd, int skill_id, int nameid, in
slot[1]=slot2;
slot[2]=slot3;
- /* 埋め込み処理 */
for(i=0,sc=0,ele=0;i<3;i++){ //Note that qty should always be one if you are using these!
int j;
if( slot[i]<=0 )
continue;
j = pc_search_inventory(sd,slot[i]);
- if(j < 0) /* 不正パケット(アイテム存在)チェック */
+ if(j < 0)
continue;
if(slot[i]==1000){ /* Star Crumb */
pc_delitem(sd,j,1,1);
@@ -10263,27 +10215,26 @@ int skill_produce_mix (struct map_session_data *sd, int skill_id, int nameid, in
}
}
- /* 材料消費 */
for(i=0;i<MAX_PRODUCE_RESOURCE;i++){
int j,id,x;
if( (id=skill_produce_db[idx].mat_id[i]) <= 0 )
continue;
- x=qty*skill_produce_db[idx].mat_amount[i]; /* 必要な個数 */
- do{ /* 2つ以上のインデックスにまたがっているかもしれない */
+ x=qty*skill_produce_db[idx].mat_amount[i];
+ do{
int y=0;
j = pc_search_inventory(sd,id);
if(j >= 0){
y = sd->status.inventory[j].amount;
- if(y>x)y=x; /* 足りている */
+ if(y>x)y=x;
pc_delitem(sd,j,y,0);
}else {
if(battle_config.error_log)
ShowError("skill_produce_mix: material item error\n");
}
- x-=y; /* まだ足りない個数を計算 */
- }while( j>=0 && x>0 ); /* 材料を消費するか、エラーになるまで繰り返す */
+ x-=y;
+ }while( j>=0 && x>0 );
}
if((equip=itemdb_isequip(nameid)))
@@ -10662,12 +10613,11 @@ int skill_blockmerc_start(struct homun_data *hd, int skillid, int tick) //[orn]
/*----------------------------------------------------------------------------
- * 初期化系
+ *
*/
/*
- * 文字列処理
- * ',' で区切って val に戻す
+ *
*/
int skill_split_str (char *str, char **val, int num)
{
@@ -10682,8 +10632,7 @@ int skill_split_str (char *str, char **val, int num)
return i;
}
/*
- * 文字列処理
- * ':' で区切ってatoiしてvalに戻す
+ *
*/
int skill_split_atoi (char *str, int *val)
{
@@ -10730,14 +10679,13 @@ int skill_split_atoi (char *str, int *val)
}
/*
- * スキルユニットの配置情報作成
+ *
*/
void skill_init_unit_layout (void)
{
int i,j,size,pos = 0;
memset(skill_unit_layout,0,sizeof(skill_unit_layout));
- // 矩形のユニット配置を作成する
for (i=0; i<=MAX_SQUARE_LAYOUT; i++) {
size = i*2+1;
skill_unit_layout[i].count = size*size;
@@ -10747,14 +10695,12 @@ void skill_init_unit_layout (void)
}
}
pos = i;
- // 矩形以外のユニット配置を作成する
for (i=0;i<MAX_SKILL_DB;i++) {
if (!skill_db[i].unit_id[0] || skill_db[i].unit_layout_type[0] != -1)
continue;
switch (i) {
case MG_FIREWALL:
case WZ_ICEWALL:
- // ファイアーウォール、アイスウォールは方向で変わるので別処理
break;
case PR_SANCTUARY:
{
@@ -10887,10 +10833,9 @@ void skill_init_unit_layout (void)
skill_db[i].unit_layout_type[j] = pos;
pos++;
}
- // ファイヤーウォール
firewall_unit_pos = pos;
for (i=0;i<8;i++) {
- if (i&1) { /* 斜め配置 */
+ if (i&1) {
skill_unit_layout[pos].count = 5;
if (i&0x2) {
int dx[] = {-1,-1, 0, 0, 1};
@@ -10903,14 +10848,14 @@ void skill_init_unit_layout (void)
memcpy(skill_unit_layout[pos].dx,dx,sizeof(dx));
memcpy(skill_unit_layout[pos].dy,dy,sizeof(dy));
}
- } else { /* 縦横配置 */
+ } else {
skill_unit_layout[pos].count = 3;
- if (i%4==0) { /* 上下 */
+ if (i%4==0) {
int dx[] = {-1, 0, 1};
int dy[] = { 0, 0, 0};
memcpy(skill_unit_layout[pos].dx,dx,sizeof(dx));
memcpy(skill_unit_layout[pos].dy,dy,sizeof(dy));
- } else { /* 左右 */
+ } else {
int dx[] = { 0, 0, 0};
int dy[] = {-1, 0, 1};
memcpy(skill_unit_layout[pos].dx,dx,sizeof(dx));
@@ -10919,11 +10864,10 @@ void skill_init_unit_layout (void)
}
pos++;
}
- // アイスウォール
icewall_unit_pos = pos;
for (i=0;i<8;i++) {
skill_unit_layout[pos].count = 5;
- if (i&1) { /* 斜め配置 */
+ if (i&1) {
if (i&0x2) {
int dx[] = {-2,-1, 0, 1, 2};
int dy[] = { 2, 1, 0,-1,-2};
@@ -10935,13 +10879,13 @@ void skill_init_unit_layout (void)
memcpy(skill_unit_layout[pos].dx,dx,sizeof(dx));
memcpy(skill_unit_layout[pos].dy,dy,sizeof(dy));
}
- } else { /* 縦横配置 */
- if (i%4==0) { /* 上下 */
+ } else {
+ if (i%4==0) {
int dx[] = {-2,-1, 0, 1, 2};
int dy[] = { 0, 0, 0, 0, 0};
memcpy(skill_unit_layout[pos].dx,dx,sizeof(dx));
memcpy(skill_unit_layout[pos].dy,dy,sizeof(dy));
- } else { /* 左右 */
+ } else {
int dx[] = { 0, 0, 0, 0, 0};
int dy[] = {-2,-1, 0, 1, 2};
memcpy(skill_unit_layout[pos].dx,dx,sizeof(dx));
@@ -10953,12 +10897,12 @@ void skill_init_unit_layout (void)
}
/*==========================================
- * スキル関係ファイル読み込み
- * skill_db.txt スキルデータ
- * skill_cast_db.txt スキルの詠唱時間とディレイデータ
- * produce_db.txt アイテム作成スキル用データ
- * create_arrow_db.txt 矢作成スキル用データ
- * abra_db.txt アブラカダブラ発動スキルデータ
+ * DB reading.
+ * skill_db.txt
+ * skill_cast_db.txt
+ * produce_db.txt
+ * create_arrow_db.txt
+ * abra_db.txt
*------------------------------------------
*/
int skill_readdb (void)
@@ -10968,7 +10912,6 @@ int skill_readdb (void)
char line[1024],path[1024],*p;
char *filename[]={"produce_db.txt","produce_db2.txt"};
- /* スキルデータベース */
memset(skill_db,0,sizeof(skill_db));
sprintf(path, "%s/skill_db.txt", db_path);
fp=fopen(path,"r");
@@ -11112,7 +11055,6 @@ int skill_readdb (void)
fclose(fp);
ShowStatus("Done reading '"CL_WHITE"%s"CL_RESET"'.\n",path);
- /* キャスティングデータベース */
sprintf(path, "%s/skill_cast_db.txt", db_path);
fp=fopen(path,"r");
@@ -11152,7 +11094,6 @@ int skill_readdb (void)
fclose(fp);
ShowStatus("Done reading '"CL_WHITE"%s"CL_RESET"'.\n",path);
- /* スキルユニットデータベース */
sprintf(path, "%s/skill_unit_db.txt", db_path);
fp=fopen(path,"r");
@@ -11211,7 +11152,6 @@ int skill_readdb (void)
ShowStatus("Done reading '"CL_WHITE"%s"CL_RESET"'.\n",path);
skill_init_unit_layout();
- /* 製造系スキルデータベース */
memset(skill_produce_db,0,sizeof(skill_produce_db));
for(m=0;m<2;m++){
sprintf(path, "%s/%s", db_path, filename[m]);
@@ -11426,7 +11366,7 @@ void skill_reload (void)
}
/*==========================================
- * スキル関係初期化処理
+ *
*------------------------------------------
*/
int do_init_skill (void)