142 lines
8.0 KiB
Erlang
142 lines
8.0 KiB
Erlang
%%----------------------------------------------------
|
|
%% 剧情
|
|
%% @author liwl
|
|
%%----------------------------------------------------
|
|
-module(drama_data).
|
|
-export([
|
|
cfg/0
|
|
, trigger/2
|
|
]).
|
|
-include("common.hrl").
|
|
-include("data_config.hrl").
|
|
|
|
cfg() ->
|
|
#data_cfg{
|
|
name = drama_data
|
|
,lua_name = drama_data
|
|
,record = drama_data
|
|
,desc = "剧情数据"
|
|
,inc = ["common.hrl", "drama.hrl", "condition.hrl"]
|
|
,source = "drama_data.xml"
|
|
,target = "drama_data.erl"
|
|
,callback = [
|
|
{{get_const, undefined}, cb_fun, handle, {get_fun, ["常量"], "get_const(~ts) -> ~ts; %% ~ts", [key, val, desc]}}
|
|
,{list, cb_fun, handle, {list, ["剧情"]}}
|
|
,{get, cb_fun, handle, {get_record, ["剧情"], bid, all}}
|
|
,{open_list, cb_fun, handle, {val_tuple_type, ["剧情"], 1, is_open, bid}}
|
|
,{tri_guide_cond, cb_fun, handle, {get_tuple, ["引导"], id, tri_conds}}
|
|
,{get_guide, cb_fun, handle, {get_tuple, ["引导"], id, conds}}
|
|
]
|
|
,callback_cli = [
|
|
{const, cb_fun_lua, handle, {key_val, ["常量"], [key], all}}
|
|
, {get, cb_fun_lua, handle, {key_val, ["剧情"], bid, all}}
|
|
, {guide, cb_fun_lua, handle, {key_val, ["引导"], id, all}}
|
|
, {lev_guide, cb_fun_lua, handle, {key_val, ["等级引导"], lev, all}}
|
|
]
|
|
,callback_json = [
|
|
{const, cb_fun_json, handle, {key_val, ["常量"], [key], all}}
|
|
, {get, cb_fun_json, handle, {key_val, ["剧情"], bid, all}}
|
|
, {guide, cb_fun_json, handle, {key_val, ["引导"], id, all}}
|
|
, {lev_guide, cb_fun_json, handle, {key_val, ["等级引导"], lev, all}}
|
|
]
|
|
,sheet = [
|
|
{["剧情"],
|
|
[#f_column{desc = "剧情Id", type = int, name = bid, mod = all}
|
|
,#f_column{desc = "名称", type = bstr, name = name, mod = all}
|
|
,#f_column{type = int, name = lev, desc = "开放等级"}
|
|
,#f_column{desc = "是否开启", type = kv, name = is_open, kv_type = bool}
|
|
,#f_column{desc = "是否跳过", type = kv, name = is_skip, kv_type = bool, mod = all}
|
|
,#f_column{desc = "是否切屏", type = kv, name = is_switch, kv_type = bool, mod = client}
|
|
,#f_column{desc = "上线处理方式", type = kv, name = offline, kv_type = [{"跳过剧情", 1}, {"重新开始", 2}]}
|
|
,#f_column{desc = "触发次数", type = int, name = num}
|
|
,#f_column{desc = "触发事件", type = atom, name = event}
|
|
,#f_column{desc = "动作条件", type = func, name = act_cond, width = 360, type_func = {?MODULE, trigger}
|
|
, spilt_str = ";", spilt_line = "\n"
|
|
, fields = [#f_column{type = atom, name = label, desc = "条件标签"}
|
|
,#f_column{type = kv, name = op, kv_type = cond_op, desc = "比较运算符"}
|
|
,#f_column{type = term, add_list_sign = false, name = val, desc = "条件要求值"}
|
|
]
|
|
}
|
|
,#f_column{desc = "动作参数", type = term, name = act, mod = all, width = 360}
|
|
,#f_column{desc = "描述", type = bstr, name = desc, mod = client}
|
|
]
|
|
}
|
|
,{["引导"], [
|
|
#f_column{type = int, name = id, desc = "ID", primary = true, mod = client}
|
|
,#f_column{type = kv, name = skip, desc = "是否可以跳过", kv_type = [{"否", 0}, {"是", 1}], mod = client}
|
|
,#f_column{type = term, name = tri_conds, desc = "触发条件", comment = "条件满足才触发,不满足直接当完成处理"}
|
|
,#f_column{type = term, name = conds, desc = "引导条件", comment = "引导条件,下次登录时,如果不再成立则自动清掉"}
|
|
,#f_column{type = bstr, name = desc, desc = "描述", mod = client}
|
|
,#f_column{type = int, name = over_step, desc = "客户端结束步数", mod = client}
|
|
,#f_column{type = term, name = special_step, desc = "关键引导步数", mod = client}
|
|
,#f_column{type = term, name = act, desc = "动作参数", mod = client, width = 360}
|
|
,#f_column{type = kv, name = is_close, desc = "是否关闭窗体", kv_type = [{"否", 0}, {"是", 1}], val = 0, mod = client}
|
|
]}
|
|
,{["等级引导"], [
|
|
#f_column{type = int, name = lev, desc = "等级", primary = true, mod = client}
|
|
,#f_column{type = int, name = id, desc = "引导id", mod = client}
|
|
]}
|
|
,{["常量"],[
|
|
#f_column{type = term, name = key, desc = "常量标识", add_list_sign = false,mod = all}
|
|
,#f_column{type = term, name = val, desc = "常量值", add_list_sign = false,mod= all}
|
|
,#f_column{type = bstr, name = desc, desc = "描述", mod = client}
|
|
]}
|
|
] %% end sheet
|
|
}.
|
|
|
|
%% @doc 任务要求处理
|
|
trigger(F = #f_column{name = N, desc = Desc, min = Min, max = Max, valid_list = ValidList, add_list_sign = AddListSign}, Lines) ->
|
|
Val = string:join(Lines, "\n"),
|
|
case catch length(Val) of
|
|
L when L >= Min andalso L =< Max ->
|
|
NewVal = case AddListSign of true -> lists:concat(["[", Val, "]"]); _ -> Val end,
|
|
NVal = case NewVal of [$[ | _] -> NewVal; [${ | _] -> NewVal; _ -> lists:concat(["[", NewVal, "]"]) end,
|
|
case util:string_to_term(NVal) of
|
|
{ok, Term} ->
|
|
case ValidList =:= [] of
|
|
true ->
|
|
NewLines = progress_val(Term, F, []),
|
|
NewF = F#f_column{type = rec, rec = condition},
|
|
gen_data_valid:valid(NewF, NewLines);
|
|
false ->
|
|
case gen_data_valid:check_term(Term, ValidList) of
|
|
true ->
|
|
NewLines = progress_val(Term, F, []),
|
|
NewF = F#f_column{type = rec, rec = condition},
|
|
gen_data_valid:valid(NewF, NewLines);
|
|
_ ->
|
|
?P(error, ">error 第[~w]行的字段[~w:~ts]的值[~ts]无效 要求为:~w ~n", [erlang:get(row_idx), N, Desc, Val, ValidList]),
|
|
put(error, true),
|
|
F#f_column{val = "undefined", val_cli = "nil"}
|
|
end
|
|
end;
|
|
_ ->
|
|
?P(error, ">error 第[~w]行的字段[~w:~ts]的值~ts无效~n", [erlang:get(row_idx), N, Desc, NVal]),
|
|
put(error, true),
|
|
F#f_column{val = "undefined", val_cli = "nil"}
|
|
end;
|
|
_ ->
|
|
?P(error, ">error 第[~w]行的字段[~w:~ts]的值[~ts]无效~n", [erlang:get(row_idx), N, Desc, Val]),
|
|
put(error, true),
|
|
F#f_column{val = "undefined", val_cli = "nil"}
|
|
end.
|
|
|
|
progress_val([], _F, Lines) ->
|
|
lists:reverse(Lines);
|
|
progress_val([H | T], F, Lines) ->
|
|
NewLines = progress_val(H, F, Lines),
|
|
progress_val(T, F, NewLines);
|
|
progress_val({Evt}, _F, Lines) ->
|
|
Str = ?S("~ts;等于;undefined", [Evt]),
|
|
[Str | Lines];
|
|
progress_val({Evt, Val}, _F, Lines) ->
|
|
Str = ?S("~ts;等于;~s", [Evt, util:to_string(Val)]),
|
|
[Str | Lines];
|
|
progress_val({Evt, Op, Val}, _F, Lines) ->
|
|
Str = ?S("~ts;~ts;~w", [Evt, Op, Val]),
|
|
?P("===~ts~n", [Str]),
|
|
[Str | Lines];
|
|
progress_val(Unknow, #f_column{name = N, desc = Desc}, Lines) ->
|
|
?P(error, ">error 第[~w]行的字段[~w:~ts]的值[Term:~w]无效~n", [erlang:get(row_idx), N, Desc, Unknow]),
|
|
Lines.
|