%%---------------------------------------------------- %% 数据配置文件 %% @author whjing2011@gmail.com %%---------------------------------------------------- -module(unit_other_part_data). -export([cfg/0]). -include("data_config.hrl"). -include("common.hrl"). cfg() -> #data_cfg{ name = unit_data ,lua_name = unit_data ,desc = "单位配置数据" ,source = "unit_other_part_data.xml" ,target = "unit_data.erl" ,inc = ["common.hrl", "unit.hrl", "attr.hrl"] ,callback = [ {{check_unit_data, 0, ""}, cb_fun, handle, {get_all_fun, " check_unit_data() -> [check_unit_data_id(Id) || Id <- all_ids()]. check_unit_data_id(Id) -> case unit_data:get_monsters(Id) of [_ | _] -> check_unit_data_id_scene(Id); _ -> case unit_data:get_attr(Id) of #attr{atk = Atk} when Atk > 0 -> check_unit_data_id_combat(Id); _ -> pass end end."}} ,{check_unit_data_id_scene, cb_fun, handle, {get_all_fun," check_unit_data_id_scene(Id) -> case is_check_data({unit_id_scene, Id}) of true -> case unit_data:get(Id) of #unit_data{} -> [check_unit_data_id_combat(Id1) || Id1 <- unit_data:get_monsters(Id), Id1 > 0]; _ -> ok end; _ -> pass end. check_unit_data_id_combat(Id) -> case is_check_data({unit_id_combat, Id}) of true -> case unit_data:get(Id) of #unit_data{} -> Attr = case unit_data:get_attr_mode(Id) of 0 -> unit_data:get_attr(Id); {lev, ModeId, _} -> unit_data:get_attr_by_lev(ModeId, 1); ModeId -> unit_data:get_attr_by_lev(ModeId, 1) end, case Attr of #attr{hp_max = 0} -> ?DATA_ERR(\"unit_id ~w, hp_max:0\", [Id]); _ -> pass end, case unit_data:get_skill_order(Id) of L1 = [_ | _] -> [skill_data:check_skill_data_active(SkillId, {unit_data_skill_order, Id}) || SkillId <- L1]; _ -> pass end, skill_data:check_skill_data_normal(unit_data:get_active_skills(Id), {unit_data_id, Id}), [skill_data:check_skill_data_active(SkillId, {unit_data_active_skill, Id}) || SkillId <- unit_data:get_active_skills(Id)], [skill_data:check_skill_data_passive(SkillId, {unit_data_passive_skill, Id}) || SkillId <- unit_data:get_passive_skills(Id)]; _ -> pass end; _ -> pass end. is_check_data(Key) -> Map = erlang:get(check_info), put(check_info, maps:put(Key, 1, Map)), maps:get(Key, Map, 0) =:= 0. all_ids() -> lists:concat([ list_ids0() ,unit_part1_data:all_ids() ,unit_part2_data:all_ids() ,unit_part3_data:all_ids() ]). list_ids0() -> []."}} ,{get, cb_fun, handle, {get_all_fun, " get(UnitId) -> case unit_part1_data:get(UnitId) of undefined -> case unit_part2_data:get(UnitId) of undefined -> unit_part3_data:get(UnitId); Ret -> Ret end; Ret -> Ret end." }} ,{get_attr, cb_fun, handle, {get_all_fun," get_attr(UnitId) -> case unit_part1_data:get_attr(UnitId) of undefined -> case unit_part2_data:get_attr(UnitId) of undefined -> unit_part3_data:get_attr(UnitId); Ret -> Ret end; Ret -> Ret end. "}} ,{get_active_skills, cb_fun, handle, {get_all_fun, " get_active_skills(UnitId) -> case unit_part1_data:get_active_skills(UnitId) of [] -> case unit_part2_data:get_active_skills(UnitId) of [] -> unit_part3_data:get_active_skills(UnitId); Ret -> Ret end; Ret -> Ret end. "}} ,{get_passive_skills, cb_fun, handle, {get_all_fun, " get_passive_skills(UnitId) -> case unit_part1_data:get_passive_skills(UnitId) of [] -> case unit_part2_data:get_passive_skills(UnitId) of [] -> unit_part3_data:get_passive_skills(UnitId); Ret -> Ret end; Ret -> Ret end. "}} ,{get_skill_show, cb_fun, handle, {get_all_fun, " get_skill_show(UnitId) -> case unit_part1_data:get_skill_show(UnitId) of [] -> case unit_part2_data:get_skill_show(UnitId) of [] -> unit_part3_data:get_skill_show(UnitId); Ret -> Ret end; Ret -> Ret end. "}} ,{get_monsters, cb_fun, handle, {get_all_fun, " get_monsters(UnitId) -> case unit_part1_data:get_monsters(UnitId) of undefined -> case unit_part2_data:get_monsters(UnitId) of undefined -> unit_part3_data:get_monsters(UnitId); Ret -> Ret end; Ret -> Ret end. "}} ,{get_attr_mode, cb_fun, handle, {get_all_fun, " get_attr_mode(UnitId) -> case unit_part1_data:get_attr_mode(UnitId) of 0 -> case unit_part2_data:get_attr_mode(UnitId) of 0 -> unit_part3_data:get_attr_mode(UnitId); Ret -> Ret end; Ret -> Ret end. "}} ,{get_multi_wave, cb_fun, handle, {get_all_fun, " get_multi_wave(UnitId) -> case unit_part1_data:get_multi_wave(UnitId) of [] -> case unit_part2_data:get_multi_wave(UnitId) of [] -> unit_part3_data:get_multi_wave(UnitId); Ret -> Ret end; Ret -> Ret end. "}} ,{get_combat_map, cb_fun, handle, {get_all_fun, " get_combat_map(UnitId) -> case unit_part1_data:get_combat_map(UnitId) of 90001 -> case unit_part2_data:get_combat_map(UnitId) of 90001 -> unit_part3_data:get_combat_map(UnitId); Ret -> Ret end; Ret -> Ret end. "}} ,{get_skill_order, cb_fun, handle, {get_all_fun, " get_skill_order(UnitId) -> case unit_part1_data:get_skill_order(UnitId) of undefined -> case unit_part2_data:get_skill_order(UnitId) of undefined -> unit_part3_data:get_skill_order(UnitId); Ret -> Ret end; Ret -> Ret end. "}} ,{get_mon_ai, cb_fun, handle, {get_all_fun, " get_mon_ai(UnitId) -> case unit_part1_data:get_mon_ai(UnitId) of undefined -> case unit_part2_data:get_mon_ai(UnitId) of undefined -> unit_part3_data:get_mon_ai(UnitId); Ret -> Ret end; Ret -> Ret end. "}} ,{{get_attr_by_lev, 2, "get_attr_by_lev(Id, Lev)->?ERR(\"get attr by lev error id ~w, lev ~w\", [Id, Lev]),#attr{}."}, cb_fun, handle, {get_fun, ["属性模型"], "get_attr_by_lev(~s, Lev) when Lev =< ~s -> #attr{atk = ~s ,def = ~s ,def_p = ~s ,def_s = ~s ,hp_max = ~s ,speed = ~s ,hit_rate = ~s ,dodge_rate = ~s ,crit_rate = ~s ,crit_ratio = ~s ,hit_magic = ~s ,dodge_magic = ~s ,dam = ~s ,res = ~s ,cure = ~s ,be_cure = ~s};", [id, lev, atk, def, def_p, def_s, hp_max, speed, hit_rate, dodge_rate, crit_rate, crit_ratio, hit_magic, dodge_magic, dam, res, cure, be_cure]}} ] ,callback_cli = [ {unit1, cb_fun_lua, handle, {val_str, ["NPC", "ELEM"], [bid], {mod,[all,client,monster,multi_wave]}}} , {button, cb_fun_lua, handle, {key_val, ["按钮配置"], [id], all}} ] ,callback_json = [ {unit1, cb_fun_json, handle, {val, ["NPC", "ELEM"], [bid], {mod,[all,client,monster,multi_wave]}}} ] ,sheet = [ {["NPC", "ELEM"], [ #f_column{type = int, name = bid, desc = "编号", primary = true, mod = all} ,#f_column{type = bstr, name = name, desc = "名称", mod = all} ,#f_column{type = int, name = career, desc = "职业", mod = all} ,#f_column{type = kv, name = sex, desc = "性别", kv_type = sex, mod = all} ,#f_column{type = int, name = lev, desc = "等级", mod = all} ,#f_column{type = kv, name = type, desc = "类型", kv_type = unit_type, mod = server} ,#f_column{type = kv, name = sub_type, desc = "类型(客)", kv_type = unit_type_cli, mod = client} ,#f_column{type = kv, name = minor_type, desc = "逻辑类型", kv_type = [{"神界冒险",2},{"其他", 1}], mod = server} ,#f_column{type = kv, name = lock, desc = "是否独占", kv_type = bool, mod = server} ,#f_column{type = term, name = data, desc = "扩展字段", mod = server} ,#f_column{type = term, name = args, desc = "客户端字段", mod = client} ,#f_column{type = bstr, name = halo_id, desc = "光环", mod = client} ,#f_column{type = bstr, name = body_id, desc = "资源ID", mod = client} ,#f_column{type = term, name = talk, desc = "说话列表", mod = client} ,#f_column{type = term, name = button, desc = "固定按钮", mod = client} ,#f_column{type = int, name = model_size, desc = "模型大小", mod = client} ,#f_column{type = kv, name = dir, desc = "场景朝向", kv_type = [{"右下", 4}, {"正下", 5}, {"左下", 6}], mod = client} ,#f_column{type = kv, name = cli_create, desc = "客户端创建", kv_type = bool, mod = all} ]} , {["按钮配置"], [ #f_column{type = int, name = id, desc = "编号", primary = true, mod = client} ,#f_column{type = bstr, name = name, desc = "名称", mod = client} ,#f_column{type = int, name = type, desc = "类型", mod = client} ,#f_column{type = int, name = priority, desc = "优先级", mod = client} ,#f_column{type = kv, kv_type = bool, name = is_auto, desc = "是否自动", mod = client} ,#f_column{type = term, name = ext, desc = "扩展参数", mod = client} ,#f_column{type = term, name = condition, desc = "限制", mod = client} ,#f_column{type = term, name = show_cond, desc = "显示限制", mod = client} ]} ,{["属性模型"], [ #f_column{type = int, name = id, desc = "ID", mod = all} ,#f_column{type = int, name = lev, desc = "等级", mod = attr} ,#f_column{type = int, name = atk, desc = "攻击", mod = attr, val = "0"} ,#f_column{type = int, name = def, desc = "防御", mod = attr, val = "0"} ,#f_column{type = int, name = def_p, desc = "物理防御", mod = attr, val = "0"} ,#f_column{type = int, name = def_s, desc = "法术防御", mod = attr, val = "0"} ,#f_column{type = int, name = hp_max, desc = "气血上限", mod = attr, val = "0"} ,#f_column{type = int, name = speed, desc = "速度", mod = attr, val = "0"} ,#f_column{type = int, name = hit_rate, desc = "命中", mod = attr, val = "0"} ,#f_column{type = int, name = dodge_rate, desc = "闪避", mod = attr, val = "0"} ,#f_column{type = int, name = crit_rate, desc = "暴击", mod = attr, val = "0"} ,#f_column{type = int, name = crit_ratio, desc = "暴伤", mod = attr, val = "0"} ,#f_column{type = int, name = hit_magic, desc = "效果命中", mod = attr, val = "0"} ,#f_column{type = int, name = dodge_magic, desc = "效果闪避", mod = attr, val = "0"} ,#f_column{type = int, name = dam, desc = "易伤", mod = attr, val = "0"} ,#f_column{type = int, name = res, desc = "免伤", mod = attr, val = "0"} ,#f_column{type = int, name = cure, desc = "治疗提升", val = "0"} ,#f_column{type = int, name = be_cure, desc = "被治疗提升", val = "0"} ]} ] }.