Exemple #1
0
 public static void BeginCaravanDialog(Pawn pawn, TravelingIncidentCaravan caravan)
 {
     tempCaravan = caravan;
     tempPawn    = pawn;
     if (!caravan.CommunicationEstablished)
     {
         OpenDialog(DialogMaker_TryToContact.PrologueNode());
     }
     else
     {
         if (caravan.incident.IntelLevel == Interceptor.IncidentIntelLevel.Danger)
         {
             OpenDialog(DialogMaker_RaidNegotiation.PrologueNode());
         }
         else if (caravan.incident.IntelLevel == Interceptor.IncidentIntelLevel.Neutral)
         {
             OpenDialog(DialogMaker_Friendly.FriendlyNode());
         }
     }
 }
Exemple #2
0
        public static DiaNode PrologueNode()
        {
            TravelingIncidentCaravan caravan = DialogUtilities.tempCaravan;
            Pawn pawn = DialogUtilities.tempPawn;
            InterceptedIncident_HumanCrowd_RaidEnemy incident = caravan.incident as InterceptedIncident_HumanCrowd_RaidEnemy;
            RaidingGoal goal = incident.goal;

            if (incident == null)
            {
                return(null);
            }
            if (incident.raidGoalType == RaidGoalType.Smite)
            {
                return(null);
            }

            if (incident.SourceFaction == Faction.OfMechanoids)
            {
                return(DialogMaker_TryToContact.MechanoidAnswers());
            }

            StringBuilder sb = new StringBuilder("PES_RaidNeg_Proglog".Translate(caravan.CaravanTitle, incident.SourceFaction));

            sb.AppendLine();
            sb.AppendLine();

            bool polite = false;

            if (incident.raidGoalType == RaidGoalType.Rescue)
            {
                if (new FloatRange(0f, 1f).RandomInRange < 0.5f)
                {
                    polite = true;
                }
            }
            if (incident.raidGoalType == RaidGoalType.Extortion)
            {
                if (new FloatRange(0f, 1f).RandomInRange < 0.2f)
                {
                    polite = true;
                }
            }

            if (polite)
            {
                sb.Append("PES_RaidNeg_Attitude_Polite".Translate());
            }
            else
            {
                sb.Append("PES_RaidNeg_Attitude_Rude".Translate());
            }
            sb.AppendLine(goal.GoalExpStr);
            sb.AppendLine();

            if (polite)
            {
                sb.AppendLine("PES_RaidNeg_DemandSurrender_Polite".Translate());
            }
            else
            {
                sb.AppendLine("PES_RaidNeg_DemandSurrender_rude".Translate());
            }

            DiaNode diaNode = new DiaNode(sb.ToString());

            DiaOption option;

            string rebuffStr = "PES_RaidNeg_Rebuff_Head".Translate() + ("PES_RaidNeg_Rebuff_" + incident.raidGoalType.ToString()).Translate() + "\n";

            option      = new DiaOption(rebuffStr);
            option.link = RebuffNode();
            diaNode.options.Add(option);

            option      = new DiaOption("PES_RaidNeg_NegDeeper".Translate() + "\n");
            option.link = NegotiateDeepNode();

            diaNode.options.Add(option);

            option      = new DiaOption("PES_RaidNeg_Delay".Translate() + "\n");
            option.link = DelayNode();
            if (caravan.stageRemainingTick > 0)
            {
                option.Disable("PES_RaidNeg_Delay_Staging".Translate(GenDate.ToStringTicksToPeriod(caravan.stageRemainingTick)));
            }
            else if (caravan.StagedBefore)
            {
                option.Disable("PES_RaidNeg_Delay_DoneBefore".Translate());
            }
            else if (caravan.delayCoolDownTick > 0)
            {
                option.Disable("PES_RaidNeg_Delay_CoolDown".Translate(GenDate.ToStringTicksToPeriod(caravan.delayCoolDownTick)));
            }
            diaNode.options.Add(option);

            diaNode.options.Add(DialogUtilities.CurtOption("PES_Cancel", null, null, true));
            return(diaNode);
        }