summaryrefslogtreecommitdiff |
diff options
author | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2019-01-28 23:31:29 +0100 |
---|---|---|
committer | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2019-01-28 23:31:29 +0100 |
commit | c116cb57903333bec870d50df180fbcb624f21ff (patch) | |
tree | 5153b61f3ce12ec15cf3656c95520d5523f5323d | |
parent | dc988b5aa72204954b2034615d644c703b35d294 (diff) |
...
-rw-r--r-- | src/battle/mechanic/turn_action/btl_turn_actions_attack.erl | 200 | ||||
-rw-r--r-- | src/battle/struct/btl_attack.erl | 12 | ||||
-rw-r--r-- | src/login/query/lgn_get_player_id.erl | 9 | ||||
-rw-r--r-- | src/player/query/plr_get_battles.erl | 9 | ||||
-rw-r--r-- | src/shared/struct/shr_query.erl | 24 |
5 files changed, 155 insertions, 99 deletions
diff --git a/src/battle/mechanic/turn_action/btl_turn_actions_attack.erl b/src/battle/mechanic/turn_action/btl_turn_actions_attack.erl index a414588..150d7b5 100644 --- a/src/battle/mechanic/turn_action/btl_turn_actions_attack.erl +++ b/src/battle/mechanic/turn_action/btl_turn_actions_attack.erl @@ -16,15 +16,17 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + -spec handle_attack_sequence ( btl_character_current_data:type(), non_neg_integer(), btl_character_current_data:type(), non_neg_integer(), - list(btl_attack:step()), integer(), - integer() + integer(), + list(btl_attack:step()), + list(btl_attack:type()) ) -> { @@ -36,61 +38,73 @@ }. handle_attack_sequence ( - CharacterCurrentData, + _CharacterCurrentData, CharacterCurrentHealth, - TargetCurrentData, + _TargetCurrentData, TargetCurrentHealth, + AttackerLuck, + DefenderLuck, AttackSequence, + Result +) +when +( + (CharacterCurrentHealth == 0) + or (TargetCurrentHealth == 0) + or (AttackSequence == []) +) -> + { + lists:reverse(Result), + CharacterCurrentHealth, + TargetCurrentHealth, + AttackerLuck, + DefenderLuck + }; +handle_attack_sequence +( + CharacterCurrentData, + AttackerHealth, + TargetCurrentData, + DefenderHealth, AttackerLuck, - DefenderLuck + DefenderLuck, + [NextAttack | AttackSequence], + Result ) -> - % TODO lists:foldl over AttackSequence to take luck into account. - AttackPlannedEffects = - lists:map + {AttackEffect, NewAttackerLuck, NewDefenderLuck} = + btl_attack:get_description_of ( - fun (AttackStep) -> - btl_attack:get_description_of - ( - AttackStep, - CharacterCurrentData, - TargetCurrentData, - AttackerLuck, - DefenderLuck - ) - end, - AttackSequence + NextAttack, + CharacterCurrentData, + TargetCurrentData, + AttackerLuck, + DefenderLuck ), - lists:foldl - ( - fun + {AttackResult, NewAttackerHealth, NewDefenderHealth} = + btl_attack:apply_to_healths ( - AttackEffectCandidate, - {AttackValidEffects, AttackerHealth, DefenderHealth} - ) -> - {AttackResult, NewAttackerHealth, NewDefenderHealth} = - btl_attack:apply_to_healths - ( - AttackEffectCandidate, - AttackerHealth, - DefenderHealth - ), - case AttackResult of - nothing -> {AttackValidEffects, AttackerHealth, DefenderHealth}; - _ -> - { - (AttackValidEffects ++ [AttackResult]), - NewAttackerHealth, - NewDefenderHealth - } - end + AttackEffect, + AttackerHealth, + DefenderHealth + ), + + NextResult = + case AttackResult of + nothing -> Result; + _ -> [AttackResult|Result] end, - { - [], - CharacterCurrentHealth, - TargetCurrentHealth - }, - AttackPlannedEffects + + handle_attack_sequence + ( + CharacterCurrentData, + NewAttackerHealth, + TargetCurrentData, + NewDefenderHealth, + NewAttackerLuck, + NewDefenderLuck, + AttackSequence, + NextResult ). -spec get_attack_sequence @@ -115,8 +129,6 @@ get_attack_sequence (Character, TargetCharacter) -> btl_attack:get_sequence(Range, AttackingWeapon, DefendingWeapon). - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -133,21 +145,16 @@ handle (BattleAction, Update) -> CharacterIX = btl_character_turn_data:get_character_ix(Data), CharacterCurrentData = btl_character_turn_data:get_character_current_data(Data), - AttackingPlayer = - btl_battle:get_player(btl_character:get_player_ix(Character), Battle), + AttackingPlayerIX = btl_character:get_player_index(Character), + AttackingPlayer = btl_battle:get_player(AttackingPlayerIX, Battle), AttackingPlayerLuck = btl_player:get_luck(AttackingPlayer), - Map = btl_battle:get_map(Battle), TargetIX = btl_battle_action:get_target_ix(BattleAction), TargetCharacter = btl_battle:get_character(TargetIX, Battle), TargetCurrentData = btl_character_current_data:new(TargetCharacter, Map), - DefendingPlayer = - btl_battle:get_player - ( - btl_character:get_player_ix(TargetCharacter), - Battle - ), + DefendingPlayerIX = btl_character:get_player_index(TargetCharacter), + DefendingPlayer = btl_battle:get_player(DefendingPlayerIX, Battle), DefendingPlayerLuck = btl_player:get_luck(DefendingPlayer), true = btl_character:get_is_alive(TargetCharacter), @@ -158,8 +165,8 @@ handle (BattleAction, Update) -> AttackEffects, RemainingAttackerHealth, RemainingDefenderHealth, - _NewAttackerLuck, - _NewDefenderLuck + NewAttackerLuck, + NewDefenderLuck } = handle_attack_sequence ( @@ -167,26 +174,39 @@ handle (BattleAction, Update) -> btl_character:get_current_health(Character), TargetCurrentData, btl_character:get_current_health(TargetCharacter), - AttackSequence, AttackingPlayerLuck, - DefendingPlayerLuck + DefendingPlayerLuck, + AttackSequence, + [] ), % TODO: update lucks... + NextAttackingPlayer = btl_player:set_luck(NewAttackerLuck, AttackingPlayer), + NextDefendingPlayer = btl_player:set_luck(NewDefenderLuck, DefendingPlayer), UpdatedCharacter = btl_character:set_current_health(RemainingAttackerHealth, Character), UpdatedBattle = - btl_battle:set_character + btl_battle:set_player ( - TargetIX, - btl_character:set_current_health + DefendingPlayerIX, + NextDefendingPlayer, + btl_battle:set_player ( - RemainingDefenderHealth, - TargetCharacter - ), - Battle + AttackingPlayerIX, + NextAttackingPlayer, + btl_battle:set_character + ( + TargetIX, + btl_character:set_current_health + ( + RemainingDefenderHealth, + TargetCharacter + ), + Battle + ) + ) ), S0Data = btl_character_turn_data:set_battle(UpdatedBattle, Data), @@ -230,6 +250,35 @@ handle (BattleAction, Update) -> ) ), + DBQuery2 = + ataxic:update_field + ( + btl_battle:get_players_field(), + ataxic:sequence + ( + [ + ataxic_sugar:update_orddict_element + ( + DefendingPlayerIX, + ataxic:update_field + ( + btl_player:get_luck_field(), + ataxic:constant(NewDefenderLuck) + ) + ), + ataxic_sugar:update_orddict_element + ( + AttackingPlayerIX, + ataxic:update_field + ( + btl_player:get_luck_field(), + ataxic:constant(NewAttackerLuck) + ) + ) + ] + ) + ), + S0Update = btl_character_turn_update:add_to_timeline ( @@ -239,22 +288,23 @@ handle (BattleAction, Update) -> ), S1Update = btl_character_turn_update:add_to_db(DBQuery1, S0Update), - S2Update = btl_character_turn_update:set_data(S1Data, S1Update), + S2Update = btl_character_turn_update:add_to_db(DBQuery2, S1Update), + S3Update = btl_character_turn_update:set_data(S1Data, S2Update), - S3Update = + S4Update = btl_victory:handle_character_lost_health ( CharacterIX, RemainingAttackerHealth, - S2Update + S3Update ), - S4Update = + S5Update = btl_victory:handle_character_lost_health ( TargetIX, RemainingDefenderHealth, - S3Update + S4Update ), - S4Update. + S5Update. diff --git a/src/battle/struct/btl_attack.erl b/src/battle/struct/btl_attack.erl index 6286e41..769f3e3 100644 --- a/src/battle/struct/btl_attack.erl +++ b/src/battle/struct/btl_attack.erl @@ -91,11 +91,7 @@ roll_precision roll_critical_hit (AttackerStatistics, AttackerLuck) -> CriticalHitChance = shr_statistics:get_critical_hits(AttackerStatistics), {_Roll, IsSuccess, NewLuck} = - shr_roll:percentage_with_luck - ( - CriticalHitChance, - AttackerLuck - ), + shr_roll:percentage_with_luck(CriticalHitChance, AttackerLuck), {IsSuccess, NewLuck}. @@ -108,11 +104,7 @@ roll_critical_hit (AttackerStatistics, AttackerLuck) -> roll_parry (DefenderStatistics, DefenderLuck) -> DefenderParryChance = shr_statistics:get_parries(DefenderStatistics), {_Roll, IsSuccess, NewLuck} = - shr_roll:percentage_with_luck - ( - DefenderParryChance, - DefenderLuck - ), + shr_roll:percentage_with_luck(DefenderParryChance, DefenderLuck), {IsSuccess, NewLuck}. diff --git a/src/login/query/lgn_get_player_id.erl b/src/login/query/lgn_get_player_id.erl index d87c8e2..2056cec 100644 --- a/src/login/query/lgn_get_player_id.erl +++ b/src/login/query/lgn_get_player_id.erl @@ -26,8 +26,9 @@ generate_reply (PlayerID) -> Output. --spec handle (binary()) -> binary(). -handle (UsernameOrEmail) -> +-spec handle (shr_query:type()) -> binary(). +handle (Query) -> + UsernameOrEmail = dict:fetch(<<"name">>, shr_query:get_url_params(Query)), PlayerID = fetch_data(UsernameOrEmail), generate_reply(PlayerID). @@ -35,10 +36,8 @@ handle (UsernameOrEmail) -> %% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% out(A) -> - {ok, UsernameOrEmailTXT} = yaws_api:queryvar(A, "name"), - UsernameOrEmail = list_to_binary(UsernameOrEmailTXT), { content, "application/json; charset=UTF-8", - handle(UsernameOrEmail) + handle(shr_query:new(A)) }. diff --git a/src/player/query/plr_get_battles.erl b/src/player/query/plr_get_battles.erl index 0d93154..4b00ed8 100644 --- a/src/player/query/plr_get_battles.erl +++ b/src/player/query/plr_get_battles.erl @@ -44,8 +44,9 @@ generate_reply (QueryState) -> Output. --spec handle (binary()) -> binary(). -handle (PlayerID) -> +-spec handle (shr_query:type()) -> binary(). +handle (Query) -> + PlayerID = dict:fetch(<<"pid">>, shr_query:get_url_params(Query)), QueryState = fetch_data(PlayerID), generate_reply(QueryState). @@ -53,10 +54,8 @@ handle (PlayerID) -> %% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% out(A) -> - {ok, PlayerIDTXT} = yaws_api:queryvar(A, "pid"), - PlayerID = list_to_binary(PlayerIDTXT), { content, "application/json; charset=UTF-8", - handle(PlayerID) + handle(shr_query:new(A)) }. diff --git a/src/shared/struct/shr_query.erl b/src/shared/struct/shr_query.erl index 44d3222..e85f204 100644 --- a/src/shared/struct/shr_query.erl +++ b/src/shared/struct/shr_query.erl @@ -10,7 +10,8 @@ query, { ip :: binary(), - params :: map:map(binary(), any()) + params :: map(), + url_params :: dict:dict(binary(), any()) } ). @@ -26,7 +27,8 @@ [ new/1, get_ip/1, - get_params/1 + get_params/1, + get_url_params/1 ] ). @@ -45,11 +47,25 @@ new (YawsArg) -> #query { ip = IP, - params = jiffy:decode(YawsArg#arg.clidata, [return_maps]) + params = jiffy:decode(YawsArg#arg.clidata, [return_maps]), + url_params = + dict:from_list + ( + lists:map + ( + fun ({K, V}) -> + {list_to_binary(K), list_to_binary(V)} + end, + yaws_api:parse_query(YawsArg) + ) + ) }. -spec get_ip (type()) -> binary(). get_ip (Query) -> Query#query.ip. --spec get_params (type()) -> map:map(binary(), any()). +-spec get_params (type()) -> map(). get_params (Query) -> Query#query.params. + +-spec get_url_params (type()) -> dict:dict(binary(), any()). +get_url_params (Query) -> Query#query.url_params. |