/// <summary> /// Executes behavior with given context /// </summary> /// <param name="context">The context.</param> /// <returns></returns> public override BehaviorReturnCode Behave(IBehaviorContext context) { PlayerBehaviorContext playerContext = context as PlayerBehaviorContext; if (playerContext == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } PlayerRelationValue existingRelation = playerContext.Player.RelationsValues.FirstOrDefault(r => r.Level == PlayerRelationsLevel.Hostile); if (existingRelation != null) { Player relationPlayer = existingRelation.Player; if (relationPlayer == null) { relationPlayer = playerContext.Player.GameSession.Players.FirstOrDefault(p => p.Index == existingRelation.PlayerIndex); existingRelation.Player = relationPlayer; } if (relationPlayer != null && !relationPlayer.IsEliminated) { returnCode = BehaviorReturnCode.Success; return(returnCode); } } returnCode = BehaviorReturnCode.Failure; return(returnCode); }
/// <summary> /// Executes behavior with given context /// </summary> /// <param name="context">The context.</param> /// <returns></returns> public override BehaviorReturnCode Behave(IBehaviorContext context) { PlayerBehaviorContext playerContext = context as PlayerBehaviorContext; if (playerContext == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } Player player = playerContext.Player; PlayerRelationValue relation = playerContext.RelationValues.Current; if (player == null || relation.DeclarationCooldown != 0 || relation.PropositionState != DiplomaticActions.None || !relation.AvailableActions.HasFlag(DiplomaticAction)) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } Player otherPlayer = relation.Player; if (otherPlayer == null || otherPlayer.IsEliminated) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } bool currentState = relation.GetActionState(DiplomaticAction); if (currentState) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } bool canActivate = relation.GetDiplomaticActionEnableState(DiplomaticAction, player.GameSession.EnvironmentConfig.DiplomacyConfig); if (canActivate) { DispatcherHelper.InvokeOnMainThread(otherPlayer, new Action(() => { player.ProposeDiplomaticAction(relation, DiplomaticAction); })); returnCode = BehaviorReturnCode.Success; return(returnCode); } returnCode = BehaviorReturnCode.Failure; return(returnCode); }
/// <summary> /// Executes behavior with given context /// </summary> /// <param name="context">The context.</param> /// <returns></returns> public override BehaviorReturnCode Behave(IBehaviorContext context) { PlayerBehaviorContext playerContext = context as PlayerBehaviorContext; if (playerContext == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } Player player = playerContext.Player; PlayerRelationValue relation = playerContext.RelationValues.Current; Player otherPlayer = relation.Player; if (otherPlayer == null || relation.DeclarationCooldown != 0) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } if (otherPlayer.IsEliminated) { returnCode = BehaviorReturnCode.Success; return(returnCode); } if (relation.IsAtWar) { float cost = player.GameSession.EnvironmentConfig.DiplomacyConfig.GetActionCost(DiplomaticActions.MakePeace); if (cost > player.Intelligence) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } DispatcherHelper.InvokeOnMainThread(relation.Player, new Action(() => { player.MakePeace(relation); })); returnCode = BehaviorReturnCode.Success; return(returnCode); } returnCode = BehaviorReturnCode.Failure; return(returnCode); }
/// <summary> /// Executes behavior with given context /// </summary> /// <param name="context">The context.</param> /// <returns></returns> public override BehaviorReturnCode Behave(IBehaviorContext context) { PlayerBehaviorContext playerContext = context as PlayerBehaviorContext; if (playerContext == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } Player player = playerContext.Player; PlayerRelationValue relation = playerContext.RelationValues.Current; Player otherPlayer = relation.Player; if (otherPlayer == null) // || relation.DeclarationCooldown != 0) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } if (otherPlayer.IsEliminated) { returnCode = BehaviorReturnCode.Success; return(returnCode); } var otherPlayerRelation = otherPlayer.RelationsValues.FirstOrDefault(r => playerContext.Player.Index == r.PlayerIndex); if (otherPlayerRelation.PropositionState != DiplomaticActions.None) { DispatcherHelper.InvokeOnMainThread(otherPlayer, new Action(() => { otherPlayer.ActivateProposedDiplomaticAction(otherPlayerRelation); })); returnCode = BehaviorReturnCode.Success; return(returnCode); } returnCode = BehaviorReturnCode.Failure; return(returnCode); }
/// <summary> /// Executes behavior with given context /// </summary> /// <param name="context">The context.</param> /// <returns></returns> public override BehaviorReturnCode Behave(IBehaviorContext context) { PlayerBehaviorContext playerContext = context as PlayerBehaviorContext; if (playerContext?.Player == null || playerContext.RelationValues == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } Player player = playerContext.Player; PlayerRelationValue relation = playerContext.RelationValues.Current; if (relation == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } DiplomacyItem item = relation.DiplomaticItems.FirstOrDefault(i => i.Data.Id == DiplomacyItemId && i.IsEnabled && !i.IsAcquired); if (item == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } item.Acquire(relation); if (item.IsAcquired) { returnCode = BehaviorReturnCode.Success; return(returnCode); } returnCode = BehaviorReturnCode.Failure; return(returnCode); }
private bool CheckRelation(UnitBehaviorContext unitContext, Player anotherPlayer) { Debug.Assert(anotherPlayer != null, "Player null"); BaseUnit unit = unitContext.Unit; PlayerRelationValue relation = unit.Owner.RelationsValues.FirstOrDefault(r => r.PlayerIndex == anotherPlayer.Index); if (relation != null) { return(false); } unit.Owner.AddRelation(anotherPlayer, unit); relation = anotherPlayer.RelationsValues.FirstOrDefault(r => r.PlayerIndex == unit.Owner.Index); if (relation != null) { return(true); } anotherPlayer.AddRelation(unit.Owner, unit); return(true); }
/// <summary> /// Executes behavior with given context /// </summary> /// <param name="context">The context.</param> /// <returns></returns> public override BehaviorReturnCode Behave(IBehaviorContext context) { PlayerBehaviorContext playerContext = context as PlayerBehaviorContext; if (playerContext == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } Player player = playerContext.Player; DiplomacyConfiguration diplomacyConfig = player.GameSession.EnvironmentConfig.DiplomacyConfig; PlayerRelationValue relation = playerContext.RelationValues.Current; Player otherPlayer = relation.Player; if (otherPlayer == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } if (otherPlayer.IsEliminated) { returnCode = BehaviorReturnCode.Success; return(returnCode); } float otherPlayerInfluence = player.GameSession.Galaxy.PlayersInfluence[otherPlayer]; float myInfluence = player.GameSession.Galaxy.PlayersInfluence[player]; if (otherPlayerInfluence > myInfluence) { relation.UpdateLevel(relation.RelationValue - InfluenceRelationChange, diplomacyConfig); } else { relation.UpdateLevel(relation.RelationValue + InfluenceRelationChange, diplomacyConfig); } if (otherPlayer.TotalTechnologiesAquired > player.TotalTechnologiesAquired) { relation.UpdateLevel(relation.RelationValue + TechnologyRelationChange, diplomacyConfig); } int tradeRoutesWithPlayer = player.TradeRoutes.Count(tr => tr is GlobalTradeRoute && (tr.From.Owner == otherPlayer || tr.To.Owner == otherPlayer)); if (tradeRoutesWithPlayer > 0) { int relationChange = GlobalTradeRelationChange * tradeRoutesWithPlayer; relation.UpdateLevel(relation.RelationValue + relationChange, diplomacyConfig); } if (relation.Player.HasOpenBorders(player)) { relation.UpdateLevel(relation.RelationValue + OpenBordersRelationChange, diplomacyConfig); } else { relation.UpdateLevel(relation.RelationValue + CloseBordersRelationChange, diplomacyConfig); } if (relation.Player.IsAtWar(player)) { relation.UpdateLevel(diplomacyConfig.HostileRelationValueMin, diplomacyConfig); } returnCode = BehaviorReturnCode.Success; return(returnCode); }
/// <summary> /// Executes behavior with given context /// </summary> /// <param name="context">The context.</param> /// <returns></returns> public override BehaviorReturnCode Behave(IBehaviorContext context) { PlayerBehaviorContext playerContext = context as PlayerBehaviorContext; if (playerContext == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } Player player = playerContext.Player; PlayerRelationValue relation = playerContext.RelationValues.Current; /* * if (!relation.AvailableActions.HasFlag(Action)) * { * returnCode = BehaviorReturnCode.Failure; * return returnCode; * } */ Player otherPlayer = relation.Player; if (otherPlayer == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } if (otherPlayer.IsEliminated) { returnCode = BehaviorReturnCode.Success; return(returnCode); } bool currentState = relation.GetActionState(Action); if (currentState == State || !relation.AvailableActions.HasFlag(Action)) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } if (Action == DiplomaticActions.BordersControl && relation.IsEntryAllowed == State) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } bool canActivate = relation.GetDiplomaticActionEnableState(Action, player.GameSession.EnvironmentConfig.DiplomacyConfig); if (canActivate || IsProposition) { if (!IsProposition) { float cost = player.GameSession.EnvironmentConfig.DiplomacyConfig.GetActionCost(Action); if (cost > player.Intelligence) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } } if (State) { DispatcherHelper.InvokeOnMainThread(relation.Player, new Action(() => { player.ActivateDiplomaticAction(relation, Action, !IsProposition); })); } else { DispatcherHelper.InvokeOnMainThread(relation.Player, new Action(() => { player.DeactivateDiplomaticAction(relation, Action, !IsProposition); })); } returnCode = BehaviorReturnCode.Success; return(returnCode); } returnCode = BehaviorReturnCode.Failure; return(returnCode); }