summaryrefslogtreecommitdiff |
diff options
author | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2019-01-17 21:51:50 +0100 |
---|---|---|
committer | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2019-01-17 21:51:50 +0100 |
commit | 146120882616e46b75f881a12b69c9581be53861 (patch) | |
tree | cce4859686a50d04f61dc2ea3cb36da735c9c6fd | |
parent | 09d4492d776115666ba5839971414e18eac9fd90 (diff) |
Matchmaking still has serious issues...
-rw-r--r-- | src/battle/struct/btl_player.erl | 29 | ||||
-rw-r--r-- | src/bounty/bnt_join_battle.erl | 170 |
2 files changed, 187 insertions, 12 deletions
diff --git a/src/battle/struct/btl_player.erl b/src/battle/struct/btl_player.erl index cedd9e7..d5c0de7 100644 --- a/src/battle/struct/btl_player.erl +++ b/src/battle/struct/btl_player.erl @@ -12,7 +12,9 @@ id :: shr_player:id(), character_ix :: non_neg_integer(), timeline :: list(any()), - is_active :: boolean() + is_active :: boolean(), + summary_ix :: non_neg_integer(), + summary_category :: shr_battle_summary:category() } ). @@ -27,6 +29,8 @@ [ get_id/1, get_index/1, + get_summary_index/1, + get_summary_category/1, get_character_index/1, get_timeline/1, @@ -44,7 +48,7 @@ -export ( [ - new/3 + new/5 ] ). @@ -61,6 +65,12 @@ get_id (Player) -> Player#player.id. -spec get_index (type()) -> non_neg_integer(). get_index (Player) -> Player#player.ix. +-spec get_summary_index (type()) -> non_neg_integer(). +get_summary_index (Player) -> Player#player.summary_ix. + +-spec get_summary_category (type()) -> shr_battle_summary:category(). +get_summary_category (Player) -> Player#player.summary_category. + -spec get_character_index (type()) -> non_neg_integer(). get_character_index (Player) -> Player#player.character_ix. @@ -85,15 +95,24 @@ add_to_timeline (NewEvents, Player) -> -spec reset_timeline (type()) -> type(). reset_timeline (Player) -> Player#player{ timeline = [] }. --spec new (non_neg_integer(), non_neg_integer(), shr_player:id()) -> type(). -new (IX, CharacterIX, ID) -> +-spec new + ( + non_neg_integer(), + non_neg_integer(), + shr_player:id(), + non_neg_integer(), + shr_battle_summary:category() + ) -> type(). +new (IX, CharacterIX, ID, SummaryIX, SummaryCategory) -> #player { ix = IX, character_ix = CharacterIX, id = ID, is_active = true, - timeline = [] + timeline = [], + summary_ix = SummaryIX, + summary_category = SummaryCategory }. -spec get_timeline_field () -> non_neg_integer(). diff --git a/src/bounty/bnt_join_battle.erl b/src/bounty/bnt_join_battle.erl index 3a88e77..56b5af2 100644 --- a/src/bounty/bnt_join_battle.erl +++ b/src/bounty/bnt_join_battle.erl @@ -238,14 +238,24 @@ handle_characters -spec add_player ( shr_player:id(), + non_neg_integer(), + shr_battle_summary:category(), btl_battle:type() ) -> {btl_battle:type(), non_neg_integer(), ataxic:basic()}. -add_player (PlayerID, Battle) -> +add_player (PlayerID, PlayerSummaryIX, PlayerSummaryCategory, Battle) -> Players = btl_battle:get_players(Battle), PlayerIX = orddict:size(Players), - NewPlayer = btl_player:new(PlayerIX, 0, PlayerID), + NewPlayer = + btl_player:new + ( + PlayerIX, + 0, + PlayerID, + PlayerSummaryIX, + PlayerSummaryCategory + ), NewPlayers = orddict:store(PlayerIX, NewPlayer, Players), S0Battle = btl_battle:set_players(NewPlayers, Battle), @@ -387,6 +397,7 @@ get_roster_characters (PlayerID, SelectedRosterCharacterIXs) -> ( shr_player:id(), non_neg_integer(), + shr_battle_summary:category(), list(non_neg_integer()), btl_pending_battle:type() ) @@ -395,6 +406,7 @@ add_to_pending_battle ( PlayerID, PlayerSumIX, + PlayerSumCategory, SelectedRosterCharacterIXs, PendingBattle ) -> @@ -406,7 +418,10 @@ add_to_pending_battle ), NewCharacters = get_roster_characters(PlayerID, SelectedRosterCharacterIXs), - {S0Battle, PlayerIX, BattleUpdate0} = add_player(PlayerID, Battle), + + {S0Battle, PlayerIX, BattleUpdate0} = + add_player(PlayerID, PlayerSumIX, PlayerSumCategory, Battle), + {S1Battle, BattleUpdate1} = add_characters(NewCharacters, PlayerIX, S0Battle), @@ -466,6 +481,7 @@ add_to_pending_battle ( shr_player:id(), non_neg_integer(), + shr_battle_summary:category(), map_map:id(), list(non_neg_integer()) ) @@ -474,6 +490,7 @@ generate_pending_battle ( PlayerID, PlayerSumIX, + PlayerSumCategory, MapID, SelectedRosterCharacterIXs ) -> @@ -508,6 +525,7 @@ generate_pending_battle ( PlayerID, PlayerSumIX, + PlayerSumCategory, SelectedRosterCharacterIXs, PendingBattle ), @@ -518,6 +536,7 @@ generate_pending_battle ( shr_player:id(), non_neg_integer(), + shr_battle_summary:category(), list(non_neg_integer()), btl_pending_battle:id(), btl_pending_battle:type() @@ -527,6 +546,7 @@ repair_join_battle ( PlayerID, PlayerSumIX, + PlayerSumCategory, RosterCharIXs, PBattleID, PBattle @@ -538,6 +558,7 @@ repair_join_battle ( PlayerID, PlayerSumIX, + PlayerSumCategory, RosterCharIXs, PBattle ), @@ -557,14 +578,30 @@ repair_join_battle ( shr_player:id(), non_neg_integer(), + shr_battle_summary:category(), list(non_neg_integer()), btl_pending_battle:id(), map_map:id() ) -> {ok, btl_pending_battle:type()}. -repair_create_battle (PlayerID, PlayerSumIX, RosterCharIXs, PBattleID, MapID) -> +repair_create_battle +( + PlayerID, + PlayerSumIX, + PlayerSumCategory, + RosterCharIXs, + PBattleID, + MapID +) -> NewPendingBattle = - generate_pending_battle(PlayerID, PlayerSumIX, MapID, RosterCharIXs), + generate_pending_battle + ( + PlayerID, + PlayerSumIX, + PlayerSumCategory, + MapID, + RosterCharIXs + ), ok = ataxia_client:update @@ -636,7 +673,7 @@ repair_user_link (PlayerID, Mode, Category, PBattleUserIX, PBattleID) -> btl_pending_battle:id(), btl_pending_battle:type() ) - -> ok. + -> {btl_battle:id(), btl_battle:type()}. repair_generate_battle (PBattleID, PBattle) -> Battle = btl_pending_battle:get_battle(PBattle), {ok, BattleID} = ataxia_client:reserve(battle_db, ataxia_security:janitor()), @@ -686,6 +723,113 @@ repair_generate_battle (PBattleID, PBattle) -> BattleID ), + {BattleID, Battle}. + +-spec repair_battle_final_link_of_player + ( + btl_battle:id(), + btl_player:type() + ) + -> ok. +repair_battle_final_link_of_player (BattleID, Player) -> + SummaryField = + ( + case btl_player:get_summary_category(Player) of + invasion -> shr_player:get_invasion_summaries_field(); + event -> shr_player:get_event_summaries_field(); + campaign -> shr_player:get_campaign_summaries_field() + end + ), + + SummaryIX = btl_player:get_summary_index(Player), + + Update = + ataxic:update_value + ( + ataxic:update_field + ( + SummaryField, + ataxic:apply_function + ( + orddict, + store, + [ + ataxic:constant(SummaryIX), + ataxic:sequence + ( + [ + ataxic:apply_function + ( + orddict, + fetch, + [ + ataxic:constant(SummaryIX), + ataxic:current_value() + ] + ), + ataxic:update_field + ( + shr_battle_summary:get_is_pending_field(), + ataxic:constant(false) + ), + ataxic:update_field + ( + shr_battle_summary:get_id_field(), + ataxic:constant(BattleID) + ), + ataxic:update_field + ( + shr_battle_summary:get_is_players_turn_field(), + ataxic:constant(btl_player:get_index(Player) == 0) + ) + ] + ), + ataxic:current_value() + ] + ) + ) + ), + + ok = + ataxia_client:update + ( + player_db, + ataxia_security:admin(), + Update, + btl_player:get_id(Player) + ), + + ok. + + +-spec repair_battle_final_links + ( + btl_pending_battle:id(), + btl_battle:id(), + btl_battle:type() + ) + -> ok. +repair_battle_final_links (PendingBattleID, BattleID, Battle) -> + + Players = btl_battle:get_players(Battle), + + true = + lists:all + ( + fun (Player) -> + (repair_battle_final_link_of_player(BattleID, Player) == ok) + end, + orddict:to_list(Players) + ), + + ok = + ataxia_client:remove + ( + pending_battle_db, + ataxia_security:admin(), + PendingBattleID + ), + ok. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -730,6 +874,7 @@ generate (PlayerID, Mode, Category, SummaryIX, MapID, RosterCharIXs) -> ( PlayerID, SummaryIX, + Category, RosterCharIXs, NewPBattleID, MapID @@ -781,6 +926,7 @@ attempt ( PlayerID, SummaryIX, + Category, SelectedRosterCharacterIXs, PendingBattle ), @@ -797,7 +943,17 @@ attempt repair_user_link(PlayerID, Mode, Category, SummaryIX, PendingBattleID), case btl_pending_battle:get_free_slots(S0PendingBattle) of - 0 -> repair_generate_battle(PendingBattleID, S0PendingBattle); + 0 -> + {BattleID, Battle} = + repair_generate_battle(PendingBattleID, S0PendingBattle), + ok = + repair_battle_final_links + ( + PendingBattleID, + BattleID, + Battle + ); + _ -> ok end, |