Files

400 lines
18 KiB
Erlang
Raw Permalink Normal View History

2026-05-23 22:10:14 +08:00
%%%-------------------------------------------------------------------
%%% @author Administrator
%%% @copyright (C) 2016, <COMPANY>
%%% @doc
%%%
%%% @end
%%% Created : 22. 十二月 2016 8:48
%%%-------------------------------------------------------------------
-module(skill_other_part_data).
-export([cfg/0]).
-export([skill_type/0, target_type/0, effect_type/0, hit_type/0, trigger_condition/0, join_type/0, buff_result_type/0
,positive_or_negative_type/0, effect_condition/0, passive_effect_condition/0, skill_target/0, hurt_type/0, skill_best_target/0, fit_combat_type/0
]).
-include("data_config.hrl").
-include("common.hrl").
cfg() ->
#data_cfg{
name = skill_data
,lua_name = skill_data
,desc = "skill配置数据"
,source = "skill_other_part_data.xml"
,target = "skill_data.erl"
,inc = ["skill.hrl", "common.hrl"]
,callback = [
{{check_skill_data, 0 , ""}, cb_fun, handle, {get_all_fun, "
check_skill_data() ->
check_skill_id_repeat(list_ids(), #{}),
[check_skill_data_id(Id) || Id <- list_ids()].
"}}
,{check_skill_data_id, cb_fun, handle, {get_all_fun, "
check_skill_data_id(Id) ->
case is_check_data({skill, Id}) of
true ->
case skill_data:get_skill(Id) of
#skill_data{effect_list = EffList, type = Type} ->
[check_skill_data_eff(EId, Id, Type) || EId <- EffList];
_ -> pass
end;
_ -> pass
end.
check_skill_id_repeat([], IdMap) ->
IdMap;
check_skill_id_repeat([Id | T], IdMap) ->
case maps:get(Id, IdMap, 0) of
0 -> check_skill_id_repeat(T, maps:put(Id, 1, IdMap));
_ ->
?DATA_ERR(\"Skill ID is repeated:~w\", [Id]),
check_skill_id_repeat(T, IdMap)
end.
check_skill_data_eff(Id, SkillId, SkillType) ->
case is_check_data({skill_eff, Id}) of
true ->
case skill_data:get_effect(Id) of
%% #effect_data{effect_type = hurt} when SkillType =:= passive_skill ->
%% ?DATA_ERR(\"Passive skills====~w effect type ishurt\", [SkillId, Id]);
#effect_data{passive_effect = Passive, effect_type = hurt} when Passive =/= none ->
?DATA_ERR(\"Passive skills====~w effect type ishurt\", [Id]);
_ -> skip
end,
case skill_data:get_effect(Id) of
#effect_data{effect_param = Params = [_ | _]} ->
case lists:keyfind(buff, 1, Params) of
{buff, Buffs = [_ | _]} ->
[check_buff_data(BuffId) || BuffId <- Buffs];
{buff, BuffId} ->
check_buff_data(BuffId);
_ -> pass
end,
case lists:keyfind(self_buff, 1, Params) of
{self_buff, Buffs1 = [_ | _]} ->
[check_buff_data(BuffId) || BuffId <- Buffs1];
{self_buff, BuffId1} ->
check_buff_data(BuffId1);
_ -> pass
end,
case lists:keyfind(target_to_self_buff, 1, Params) of
{target_to_self_buff, Buffs2 = [_ | _]} ->
[check_buff_data(BuffId2) || BuffId2 <- Buffs2];
{target_to_self_buff, BuffId2} ->
check_buff_data(BuffId2);
_ -> pass
end;
_ -> pass
end;
_ -> pass
end.
is_check_data(Key) ->
Map = get(check_info),
put(check_info, maps:put(Key, 1, Map)),
maps:get(Key, Map, 0) =:= 0.
check_buff_data(BuffId) ->
case skill_data:get_buff(BuffId) of
#combat_buff_data{join_type = use_by_pro} ->
skill_data:get_buff_pro(BuffId);
_ -> pass
end.
"}}
,{{check_skill_data_normal, 2, ""}, cb_fun, handle, {get_all_fun, "
check_skill_data_normal([], From) ->
?DATA_ERR(\"[~w]General attack skill is not configured.\", [From]);
check_skill_data_normal([SkillId | T], From) ->
case skill_data:get_skill(SkillId) of
#skill_data{is_normal_skill = ?true} -> true;
_ -> check_skill_data_normal(T, From)
end.
"}}
,{{check_skill_data_active, 2, ""}, cb_fun, handle, {get_all_fun, "
check_skill_data_active(SkillId, From) ->
case is_check_data({skill_active, SkillId}) of
true ->
case skill_data:get_skill(SkillId) of
#skill_data{type = active_skill} -> pass;
#skill_data{} ->
?DATA_ERR(\"Not active skills:~w ~w\", [SkillId, From]);
_ -> pass
end;
_ -> pass
end.
"}}
,{{check_skill_data_passive, 2, ""}, cb_fun, handle, {get_all_fun, "
check_skill_data_passive(SkillId, From) ->
case is_check_data({skill_passive, SkillId}) of
true ->
case skill_data:get_skill(SkillId) of
#skill_data{type = passive_skill} -> pass;
#skill_data{} ->
?DATA_ERR(\"Not a passive skill:~w ~w\", [SkillId, From]);
_ -> pass
end;
_ -> pass
end.
"}}
,{{list_ids, 0, ""}, cb_fun, handle, {get_all_fun, "
list_ids() ->
lists:concat([
skill_part1_data:list_ids()
,skill_part2_data:list_ids()
,skill_part3_data:list_ids()
,skill_part4_data:list_ids()
,skill_part5_data:list_ids()
,skill_part6_data:list_ids()
]).
"}}
,{get_skill, cb_fun, handle, {get_all_fun, "
get_skill(SkillId) ->
case skill_part1_data:get_skill(SkillId) of
undefined ->
case skill_part2_data:get_skill(SkillId) of
undefined ->
case skill_part3_data:get_skill(SkillId) of
undefined ->
case skill_part4_data:get_skill(SkillId) of
undefined ->
case skill_part5_data:get_skill(SkillId) of
undefined -> skill_part6_data:get_skill(SkillId);
Ret -> Ret
end;
Ret -> Ret
end;
Ret -> Ret
end;
Ret -> Ret
end;
Ret -> Ret
end.
"}}
,{get_effect, cb_fun, handle, {get_all_fun, "
get_effect(EffectId) ->
case skill_part1_data:get_effect(EffectId) of
undefined ->
case skill_part2_data:get_effect(EffectId) of
undefined ->
case skill_part3_data:get_effect(EffectId) of
undefined ->
case skill_part4_data:get_effect(EffectId) of
undefined ->
case skill_part5_data:get_effect(EffectId) of
undefined -> skill_part6_data:get_effect(EffectId);
Ret -> Ret
end;
Ret -> Ret
end;
Ret -> Ret
end;
Ret -> Ret
end;
Ret -> Ret
end.
"}}
,{get_buff, cb_fun, handle, {get_record, ["BUFF"], bid, combat_buff_data, all}}
,{get_buff_pro, cb_fun, handle, {get_tuple, ["BUFF"], bid, group_pro}}
,{{get_skill_id_by_group, 2, ""}, cb_fun, handle, {get_all_fun,"
get_skill_id_by_group(SkillId, Lev) ->
case skill_part1_data:get_skill_id_by_group(SkillId, Lev) of
undefined ->
case skill_part2_data:get_skill_id_by_group(SkillId, Lev) of
undefined ->
case skill_part3_data:get_skill_id_by_group(SkillId, Lev) of
undefined ->
case skill_part4_data:get_skill_id_by_group(SkillId, Lev) of
undefined ->
case skill_part5_data:get_skill_id_by_group(SkillId, Lev) of
undefined -> skill_part6_data:get_skill_id_by_group(SkillId, Lev);
Ret -> Ret
end;
Ret -> Ret
end;
Ret -> Ret
end;
Ret -> Ret
end;
Ret -> Ret
end.
"}}
]
,callback_cli = [
{get_act_data, cb_fun_lua, handle, {key_val, ["动作"], [bid], all}}
,{get_effect_data, cb_fun_lua, handle, {key_val, ["特效"], [bid], all}}
,{get_buff, cb_fun_lua, handle, {key_val, ["BUFF"], [bid], all}}
,{get_shake_data, cb_fun_lua, handle, {key_val, ["震屏"], [bid], all}}
,{get_model_data, cb_fun_lua, handle, {key_val, ["特殊模型偏移"], [bid], all}}
]
,callback_json = [
{get_act_data, cb_fun_json, handle, {key_val, ["动作"], [bid], all}}
,{get_effect_data, cb_fun_json, handle, {key_val, ["特效"], [bid], all}}
,{get_buff, cb_fun_json, handle, {key_val, ["BUFF"], [bid], all}}
,{get_shake_data, cb_fun_json, handle, {key_val, ["震屏"], [bid], all}}
,{get_model_data, cb_fun_json, handle, {key_val, ["特殊模型偏移"], [bid], all}}
]
,sheet = [
{["BUFF"], [
#f_column{type = int, name = bid, desc = "Bid", mod = all, primary = true}
,#f_column{type = bstr, name = name, desc = "名称", mod = all}
,#f_column{type = int, name = group, desc = "组别", mod = all}
,#f_column{type = kv, name = join_type, desc = "叠加类型", kv_type = {?MODULE, join_type, []}, mod = all}
,#f_column{type = int, name = lev, desc = "效果等级", mod = server}
,#f_column{type = int, name = join_num, desc = "叠加数量", mod = server}
,#f_column{type = int, name = duration , desc = "持续时间", mod = all}
,#f_column{type = kv, name = buff_result_type, desc = "效果类型", kv_type = {?MODULE, buff_result_type, []}, mod = server}
,#f_column{type = kv, name = clean_when_dead, desc = "死亡清除", mod = all, kv_type = [{"",true},{"",false}]}
,#f_column{type = int, name = clean_next_wave, desc = "持续波数", mod = server}
,#f_column{type = int, name = probability, desc = "生效概率", mod = server}
,#f_column{type = term, name = buff_result, desc = "参数", mod = server}
,#f_column{type = kv, name = positive_or_negative , desc = "增益或减益buff", kv_type = {?MODULE, positive_or_negative_type, []},mod = all}
,#f_column{type = kv, name = can_reduce, desc = "能否驱散", kv_type = [{"", can_reduce}, {"", can_not_reduce}], mod = server}
,#f_column{type = bstr, name = desc, desc = "描述", mod = all}
,#f_column{type = int, name = icon, desc = "图标", mod = client}
,#f_column{type = int, name = res, desc = "特效", mod = client}
,#f_column{type = bstr, name = client_desc, desc = "飘字", mod = client}
,#f_column{type = int, name = efftive_effect, desc = "生效特效", mod = client}
,#f_column{type = kv, name = can_select, desc = "是否可选技能", val_cli= 1,kv_type = [{"", 1}, {"", 0}], mod = client}
,#f_column{type = int, name = per , desc = "百分比", mod = client}
,#f_column{type = kv, name = is_passive, rec_name = is_show, desc = "buff表现", kv_type = [{"", true, 1}, {"", false, 0}], mod = all}
,#f_column{type = bstr, name = buff_spine, desc = "变身模型ID", mod = client}
,#f_column{type = kv, name = is_release, desc = "是否移除",val_cli= 1,kv_type = [{"", 1}, {"", 0}],mod = client}
,#f_column{type = int, name = group_pro, desc = "buff组内权重", mod = all}
,#f_column{type = int, name = dot_type, desc = "持续伤害类型", comment = "0:非持续伤害 1:中毒 2:流血 3:灼烧", val = "0", mod = server}
]}
,{["动作"], [
#f_column{type = int, name = bid, desc = "Bid", mod = client}
,#f_column{type = bstr, name = name, desc = "说明", mod = client}
,#f_column{type = int, name = act_type, desc = "动作类型", mod = client}
,#f_column{type = term, name = act_args, desc = "动作参数", mod = client}
]}
,{["特效"], [
#f_column{type = int, name = bid, desc = "特效ID", mod = client, primary = true}
,#f_column{type = int, min = -9999, name = x_fix, desc = "X轴偏移", mod = client}
,#f_column{type = int, min = -9999, name = y_fix, desc = "Y轴偏移", mod = client}
,#f_column{type = int, name = scale, desc = "缩放", mod = client}
,#f_column{type = int, name = h_scale, desc = "水平翻转", mod = client}
,#f_column{type = kv, name = play_type, desc = "播放位置", kv_type = [{"角色", 1}, {"场景", 2}, {"友方", 3}, {"敌方", 4},{"目标", 5}], mod = client}
,#f_column{type = bstr, name = res_up, desc = "上层资源", mod = client}
,#f_column{type = bstr, name = res_down, desc = "下层资源", mod = client}
,#f_column{type = bstr, name = spec_res_up, desc = "友方资源", mod = client}
,#f_column{type = bstr, name = up_action_name, desc = "上层动作名称", mod = client}
,#f_column{type = bstr, name = down_action_name, desc = "下层层动作名称", mod = client}
,#f_column{type = kv, name = is_fornt, desc = "是否后置",val_cli = 0 ,kv_type = [{"", 0}, {"", 1}], mod = client}
,#f_column{type = kv, name = is_col_effect, desc = "是否列特效",val_cli = 0,kv_type = [{"", 0}, {"", 1}],mod = client}
]}
,{["震屏"], [
#f_column{type = int, name = bid, desc = "震屏ID", mod = client, primary = true}
,#f_column{type = int, min = 0, name = shake_strength, desc = "幅度", mod = client}
,#f_column{type = int, min = 0, name = shake_rate, desc = "震动时间间隔", mod = client}
,#f_column{type = int, min = 0, name = shake_time, desc = "震动次数", mod = client}
]}
,{["特殊模型偏移"], [
#f_column{type = bstr, name = bid, desc = "资源ID", mod = client}
,#f_column{type = int, min = -999, name = model_height, desc = "模型高度", mod = client}
]}
]
}.
skill_type() ->
[
{"主动",active_skill,"active_skill"}
,{"被动", passive_skill,"passive_skill"}
,{"装备被动", eqm_passive_skill,"eqm_passive_skill"}
].
target_type() ->
kv:get(combat_target_type).
skill_target() ->
[
{"敌方存活单位", alive_enemy, 1}
,{"友方存活单位", alive_ally, 2}
,{"友方死亡单位", dead_ally, 3}
,{"敌方死亡单位", dead_enemy, 4}
,{"自己", self, 5}
,{"全场除自己", alive_except_self, 6}
,{"友方存活单位除了自己", alive_ally_except_self, 7}
].
skill_best_target() ->
[
{"血量比例最小", min_hp_per}
,{"血量比例最大", max_hp_per}
,{"速度最低", min_speed}
,{"速度最高", max_speed}
,{"攻击最低", min_atk}
,{"攻击最高", max_atk}
,{"物防最低", min_def_p}
,{"物防最高", max_def_p}
,{"法防最低", min_def_s}
,{"法防最高", max_def_s}
,{"防御最低", min_def}
,{"防御最高", max_def}
,{"优先BOSS", boss}
,{"攻击条最低", min_distance}
,{"攻击条最高", max_distance}
,{"破甲", has_reduce_def}
,{"优先坦克目标", career_type1}
,{"优先物攻目标", career_type2}
,{"优先法师目标", career_type3}
,{"优先辅助目标", career_type4}
].
effect_type() ->
kv:get(effect_type).
hurt_type() ->
[
{"物理", physical, 1}
,{"法术", spells, 2}
].
hit_type() ->
[
{"固定命中", normal_hit}
,{"属性修改", effect_hit}
,{"属性修改削弱", attr_hit}
].
trigger_condition() ->
kv:get(skill_trigger_condition).
join_type() ->
[
{"共存", to_join, 1}
,{"替换", to_replace, 2}
,{"覆盖共存", use_by_pro, 3}
,{"跳过", to_pass, 4}
].
buff_result_type() ->
kv:get(buff_result_type).
positive_or_negative_type() ->
[
{"增益", positive,1} %% 增益
,{"减益", negative,2} %% 减益
,{"控制", control,3} %% 控制
].
effect_condition() ->
kv:get(effect_condition).
passive_effect_condition() ->
kv:get(passive_effect_condition).
fit_combat_type() ->
[
{"竞技场", area}
,{"试炼塔", trial}
,{"剧情副本", chapter}
,{"深渊副本", deep}
,{"联盟战", guild_war}
,{"全体通用", all}
].