behavior3行为树
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

43 行
1.5 KiB

  1. %%%-------------------------------------------------------------------
  2. %%% @author DY
  3. %%% @copyright (C) 2020, <COMPANY>
  4. %%% @doc
  5. %%% 技能攻击
  6. %%% 随机伤害值 RAND(min_power ,max_power) * RAND(min_rate, max_rate)
  7. %%% 返回:SUCCESS
  8. %%% @end
  9. %%% Created : 07. 10月 2020 15:13
  10. %%%-------------------------------------------------------------------
  11. -module(action_skill_attack).
  12. -include("eBhv3.hrl").
  13. -include("example.hrl").
  14. %% API
  15. -export([tick/2]).
  16. tick(#{properties := Prop} = _BTree, #{uid := UID, rival_list := [RivalUID | _]} = State) ->
  17. BTreeID = game_dict:get_passivity_btree_id(RivalUID),
  18. RivalState = get_be_attacker_rival_state(Prop, UID, RivalUID),
  19. {_, RivalState1} = behavior_tree:execute_sub_tree(BTreeID, RivalState),
  20. game_dict:put_role_state(RivalUID, RivalState1),
  21. {?BT_SUCCESS, State}.
  22. get_be_attacker_rival_state(Prop, UID, RivalUID) ->
  23. #{
  24. skill_type := SkillType,
  25. min_power := MinPower, max_power := MaxPower,
  26. min_rate := MinRate, max_rate := MaxRate
  27. } = Prop,
  28. #{rival_list := RivalList} = RivalState = game_dict:get_role_state(RivalUID),
  29. case lists:member(UID, RivalList) of
  30. true ->
  31. RivalList1 = RivalList;
  32. false ->
  33. RivalList1 = RivalList ++ [UID]
  34. end,
  35. RivalState1 = RivalState#{
  36. rival_list := RivalList1,
  37. misc := #{atk_dmg => {SkillType, ?RAND(MinPower, MaxPower) * ?RAND(MinRate, MaxRate)}}
  38. },
  39. game_dict:put_role_state(RivalUID, RivalState1),
  40. ?INFO("~ts:发动了~ts攻击", [UID, SkillType]),
  41. RivalState1.