示例#1
0
 public static void ConfirmDeclareWar(DialogueContext Context)
 {
     Context.ClearOptions();
     Context.Say("You really want to declare war on us?");
     Context.AddOption("Yes!", DeclareWar);
     Context.AddOption("No.", ConversationRoot);
 }
示例#2
0
        public static void DeclareWar(DialogueContext Context)
        {
            Context.Envoy.OwnerFaction.Race.Speech.Language.SayBoo();
            if (!Context.Politics.HasEvent("you declared war on us"))
            {
                Context.Politics.RecentEvents.Add(new Diplomacy.PoliticalEvent()
                {
                    Change      = -2.0f,
                    Description = "you declared war on us",
                    Duration    = new TimeSpan(4, 0, 0, 0),
                    Time        = Context.World.Time.CurrentDate
                });
                Context.Politics.WasAtWar = true;
            }

            Context.Say(Datastructures.SelectRandom(Context.Envoy.OwnerFaction.Race.Speech.WarDeclarations));
            Context.ClearOptions();

            Context.AddOption("Goodbye.", (context) =>
            {
                Diplomacy.RecallEnvoy(context.Envoy);
                GameState.Game.StateManager.PopState();
            });

            Context.World.GoalManager.OnGameEvent(new Goals.Events.DeclareWar
            {
                PlayerFaction = Context.PlayerFaction,
                OtherFaction  = Context.Envoy.OwnerFaction
            });
        }
示例#3
0
 public static void ConversationRoot(DialogueContext Context)
 {
     RootWithPrompt(String.Format("{0} I am {1} of {2}.",
                                  Datastructures.SelectRandom(Context.Envoy.OwnerFaction.Race.Speech.Greetings),
                                  Context.EnvoyName,
                                  Context.Envoy.OwnerFaction.Name))(Context);
 }
示例#4
0
 public static void ProcessTrade(DialogueContext Context)
 {
     if (Context.TradePanel.Result == NewGui.TradeDialogResult.Propose)
     {
         Context.TradePanel.Transaction.Apply();
     }
     Context.Transition(ConversationRoot);
 }
示例#5
0
 public static void WaitForTradeToFinish(DialogueContext Context)
 {
     if (Context.TradePanel.Result == Gui.Widgets.TradeDialogResult.Pending)
     {
         Context.Transition(WaitForTradeToFinish);
     }
     else
     {
         Context.Transition(ProcessTrade);
     }
 }
示例#6
0
 public DialogueState(
     DwarfGame Game,
     GameStateManager StateManager,
     Faction.TradeEnvoy Envoy,
     Faction PlayerFaction) :
     base(Game, "GuiStateTemplate", StateManager)
 {
     DialogueContext = new DialogueContext
     {
         Envoy         = Envoy,
         PlayerFaction = PlayerFaction
     };
 }
示例#7
0
        public static void Trade(DialogueContext Context)
        {
            Context.TradePanel = Context.ChoicePanel.Root.ConstructWidget(new Gui.Widgets.TradePanel
            {
                Rect   = Context.ChoicePanel.Root.RenderData.VirtualScreen,
                Envoy  = new Trade.EnvoyTradeEntity(Context.Envoy),
                Player = new Trade.PlayerTradeEntity(Context.PlayerFaction)
            }) as Gui.Widgets.TradePanel;

            Context.TradePanel.Layout();
            Context.ChoicePanel.Root.ShowDialog(Context.TradePanel);

            Context.Transition(WaitForTradeToFinish);
        }
示例#8
0
        public static void MakePeace(DialogueContext Context)
        {
            if (!Context.Politics.HasEvent("you made peace with us"))
            {
                Context.Politics.RecentEvents.Add(new Diplomacy.PoliticalEvent()
                {
                    Change      = 0.4f,
                    Description = "you made peace with us",
                    Duration    = new TimeSpan(4, 0, 0, 0),
                    Time        = Context.World.Time.CurrentDate
                });
            }

            ConversationRoot(Context);
        }
示例#9
0
        public DialogueState(
            DwarfGame Game,
            GameStateManager StateManager,
            TradeEnvoy Envoy,
            Faction PlayerFaction,
            WorldManager World) :
            base(Game, "GuiStateTemplate", StateManager)
        {
            this.World = World;

            DialogueContext = new DialogueContext
            {
                Envoy         = Envoy,
                PlayerFaction = PlayerFaction,
            };
        }
示例#10
0
 public static void ConversationRoot(DialogueContext Context)
 {
     Context.Say(String.Format("{0} I am {1} of {2}.",
                               Datastructures.SelectRandom(Context.Envoy.OwnerFaction.Race.Speech.Greetings),
                               Context.EnvoyName,
                               Context.Envoy.OwnerFaction.Name));
     Context.ClearOptions();
     Context.AddOption("Trade", Trade);
     Context.AddOption("Leave", (context) =>
     {
         Diplomacy.RecallEnvoy(context.Envoy);
         Context.Say(Datastructures.SelectRandom(context.Envoy.OwnerFaction.Race.Speech.Farewells));
         Context.ClearOptions();
         Context.AddOption("Goodbye.", (_) =>
         {
             GameState.Game.StateManager.PopState();
         });
     });
 }
示例#11
0
        public static void ProcessTrade(DialogueContext Context)
        {
            if (Context.TradePanel.Result == Gui.Widgets.TradeDialogResult.Propose)
            {
                var containsHatedItem = Context.TradePanel.Transaction.PlayerItems
                                        .Select(item => ResourceLibrary.GetResourceByName(item.ResourceType))
                                        .SelectMany(item => item.Tags)
                                        .Any(tag => Context.Envoy.OwnerFaction.Race.HatedResources.Contains(tag));
                var containsLikedItem = Context.TradePanel.Transaction.PlayerItems
                                        .Select(item => ResourceLibrary.GetResourceByName(item.ResourceType))
                                        .SelectMany(item => item.Tags)
                                        .Any(tag => Context.Envoy.OwnerFaction.Race.LikedResources.Contains(tag));

                if (containsHatedItem)
                {
                    Context.Envoy.OwnerFaction.Race.Speech.Language.SayBoo();
                    Context.NumOffensiveTrades++;
                    var phrase = Datastructures.SelectRandom(Context.Envoy.OwnerFaction.Race.Speech.OffensiveTrades);
                    var action = Context.NumOffensiveTrades >= 3 ? GoodbyeWithPrompt(phrase) : RootWithPrompt(phrase);
                    Context.Transition(action);

                    if (!Context.Politics.HasEvent("you tried to give us something offensive"))
                    {
                        Context.Politics.RecentEvents.Add(new Diplomacy.PoliticalEvent()
                        {
                            Change      = -0.25f,
                            Description = "you tried to give us something offensive",
                            Duration    = new TimeSpan(4, 0, 0, 0),
                            Time        = Context.World.Time.CurrentDate
                        });
                    }
                }
                else
                {
                    if (containsLikedItem)
                    {
                        if (!Context.Politics.HasEvent("you gave us something we liked"))
                        {
                            Context.Politics.RecentEvents.Add(new Diplomacy.PoliticalEvent()
                            {
                                Change      = 0.25f,
                                Description = "you gave us something we liked",
                                Duration    = new TimeSpan(4, 0, 0, 0),
                                Time        = Context.World.Time.CurrentDate
                            });
                        }
                    }

                    Context.TradePanel.Transaction.Apply(Context.World);
                    Context.Transition(RootWithPrompt(Datastructures.SelectRandom(Context.Envoy.OwnerFaction.Race.Speech.GoodTrades)));

                    Context.World.GoalManager.OnGameEvent(new Goals.Events.Trade
                    {
                        PlayerFaction = Context.PlayerFaction,
                        PlayerGold    = Context.TradePanel.Transaction.PlayerMoney,
                        PlayerGoods   = Context.TradePanel.Transaction.PlayerItems,
                        OtherFaction  = Context.Envoy.OwnerFaction,
                        OtherGold     = Context.TradePanel.Transaction.EnvoyMoney,
                        OtherGoods    = Context.TradePanel.Transaction.EnvoyItems
                    });

                    if (!Context.Politics.HasEvent("we had profitable trade"))
                    {
                        Context.Politics.RecentEvents.Add(new Diplomacy.PoliticalEvent()
                        {
                            Change      = 0.25f,
                            Description = "we had profitable trade",
                            Duration    = new TimeSpan(2, 0, 0, 0),
                            Time        = Context.World.Time.CurrentDate
                        });
                    }
                    Context.Envoy.OwnerFaction.Race.Speech.Language.SayYay();
                }
            }
            else if (Context.TradePanel.Result == Gui.Widgets.TradeDialogResult.RejectOffense ||
                     Context.TradePanel.Result == Gui.Widgets.TradeDialogResult.RejectProfit)
            {
                Context.Envoy.OwnerFaction.Race.Speech.Language.SayBoo();
                Context.Transition(RootWithPrompt(Datastructures.SelectRandom(Context.Envoy.OwnerFaction.Race.Speech.BadTrades)));
            }
            else
            {
                Context.Transition(RootWithPrompt("Changed your mind?"));
            }
        }