예제 #1
0
        public bool setupSkills(Pawn teacher)
        {
            String leaderType = TeachingUtility.getLeaderType(teacher);

            if (leaderType == "leader1")
            {
                if (teacher.skills.GetSkill(SkillDefOf.Growing).Level >= TeachingUtility.minSkill)
                {
                    this.skillPool.Add(SkillDefOf.Growing);
                }
                if (teacher.skills.GetSkill(SkillDefOf.Medicine).Level >= TeachingUtility.minSkill)
                {
                    this.skillPool.Add(SkillDefOf.Medicine);
                }
                if (teacher.skills.GetSkill(SkillDefOf.Animals).Level >= TeachingUtility.minSkill)
                {
                    this.skillPool.Add(SkillDefOf.Animals);
                }
            }
            else if (leaderType == "leader2")
            {
                if (teacher.skills.GetSkill(SkillDefOf.Shooting).Level >= TeachingUtility.minSkill)
                {
                    this.skillPool.Add(SkillDefOf.Shooting);
                }
                if (teacher.skills.GetSkill(SkillDefOf.Melee).Level >= TeachingUtility.minSkill)
                {
                    this.skillPool.Add(SkillDefOf.Melee);
                }
            }
            else if (leaderType == "leader3")
            {
                if (teacher.skills.GetSkill(SkillDefOf.Construction).Level >= TeachingUtility.minSkill)
                {
                    this.skillPool.Add(SkillDefOf.Construction);
                }
                if (teacher.skills.GetSkill(SkillDefOf.Crafting).Level >= TeachingUtility.minSkill)
                {
                    this.skillPool.Add(SkillDefOf.Crafting);
                }
                if (teacher.skills.GetSkill(SkillDefOf.Artistic).Level >= TeachingUtility.minSkill)
                {
                    this.skillPool.Add(SkillDefOf.Artistic);
                }
            }
            else if (leaderType == "leader4")
            {
                if (teacher.skills.GetSkill(SkillDefOf.Intellectual).Level >= TeachingUtility.minSkill)
                {
                    this.skillPool.Add(SkillDefOf.Intellectual);
                }
            }

            if (this.skillPool.NullOrEmpty())
            {
                return(false);
            }
            return(true);
        }
        public static bool leaderHasAnySkill(Pawn teacher, out String report, out String skills)
        {
            String          leaderType = TeachingUtility.getLeaderType(teacher);
            List <SkillDef> teachable  = new List <SkillDef>();
            String          missing    = "";

            skills = "";
            bool flag = false;

            if (leaderType == "leader1")
            {
                if (teacher.skills.GetSkill(SkillDefOf.Plants).Level >= TeachingUtility.minSkill)
                {
                    teachable.Add(SkillDefOf.Plants);
                }
                if (teacher.skills.GetSkill(SkillDefOf.Medicine).Level >= TeachingUtility.minSkill)
                {
                    teachable.Add(SkillDefOf.Medicine);
                }
                if (teacher.skills.GetSkill(SkillDefOf.Animals).Level >= TeachingUtility.minSkill)
                {
                    teachable.Add(SkillDefOf.Animals);
                }
                if (teachable.Count < 3)
                {
                    flag = true;
                }
                missing = "SkillSet1";
            }
            else if (leaderType == "leader2")
            {
                if (teacher.skills.GetSkill(SkillDefOf.Shooting).Level >= TeachingUtility.minSkill)
                {
                    teachable.Add(SkillDefOf.Shooting);
                }
                if (teacher.skills.GetSkill(SkillDefOf.Melee).Level >= TeachingUtility.minSkill)
                {
                    teachable.Add(SkillDefOf.Melee);
                }
                if (teachable.Count < 2)
                {
                    flag = true;
                }
                missing = "SkillSet2";
            }
            else if (leaderType == "leader3")
            {
                if (teacher.skills.GetSkill(SkillDefOf.Construction).Level >= TeachingUtility.minSkill)
                {
                    teachable.Add(SkillDefOf.Construction);
                }
                if (teacher.skills.GetSkill(SkillDefOf.Crafting).Level >= TeachingUtility.minSkill)
                {
                    teachable.Add(SkillDefOf.Crafting);
                }
                if (teacher.skills.GetSkill(SkillDefOf.Artistic).Level >= TeachingUtility.minSkill)
                {
                    teachable.Add(SkillDefOf.Artistic);
                }
                if (teachable.Count < 3)
                {
                    flag = true;
                }
                missing = "SkillSet3";
            }
            else if (leaderType == "leader4")
            {
                if (teacher.skills.GetSkill(SkillDefOf.Intellectual).Level >= TeachingUtility.minSkill)
                {
                    teachable.Add(SkillDefOf.Intellectual);
                }
                if (teachable.Count < 1)
                {
                    flag = true;
                }
                missing = "SkillSet4";
            }

            if (teachable.NullOrEmpty())
            {
                report = "MustHaveSkill" + TeachingUtility.minSkill + " " + missing;
                return(false);
            }
            else if (flag)
            {
                report = "OnlyTeachIfSkill" + TeachingUtility.minSkill + " " + missing;
                return(true);
            }
            report = "";
            skills = missing.ReplaceFirst(" or ", " and ");
            return(true);
        }
예제 #3
0
        protected override IEnumerable <Toil> MakeNewToils()
        {
            this.FailOnDestroyedOrNull(TargetIndex.A);

            yield return(Toils_Reserve.Reserve(SpotIndex, 1, -1, null));

            yield return(new Toil
            {
                initAction = delegate
                {
                    Spot.ChangeState(Building_TeachingSpot.State.lesson, Building_TeachingSpot.LessonState.gathering);
                }
            });

            yield return(Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.InteractionCell));

            Toil waitingTime = new Toil();

            waitingTime.defaultCompleteMode   = ToilCompleteMode.Delay;
            TeachingUtility.remainingDuration = TeachingUtility.ritualDuration;
            waitingTime.defaultDuration       = TeachingUtility.remainingDuration - 360;
            waitingTime.initAction            = delegate
            {
                // Spot.lastLessonTick = Find.TickManager.TicksGame;
                // HediffLeader hediff = TeachingUtility.leaderH(this.pawn);
                //if (hediff != null) hediff.lastLessonTick = Find.TickManager.TicksGame;
                report = "WaitingDesc".Translate();
                MoteMaker.MakeInteractionBubble(this.pawn, null, ThingDefOf.Mote_Speech, ModTextures.waiting);
                Spot.ChangeState(Building_TeachingSpot.State.lesson, Building_TeachingSpot.LessonState.teaching);

                List <Thing> list = GenRadial.RadialDistinctThingsAround(this.pawn.Position, this.pawn.Map, 10f, true).ToList <Thing>();
                foreach (Thing current in list)
                {
                    Building_Chalkboard chalk = current as Building_Chalkboard;
                    bool flag2 = chalk != null;
                    if (flag2)
                    {
                        if (current.def.defName == "ChalkboardCL" && current.Faction == this.pawn.Faction)
                        {
                            if (current.GetRoom() == this.pawn.GetRoom())
                            {
                                string s = TeachingUtility.getLeaderType(this.pawn);
                                chalkboards.Add(chalk);
                                chalk.frame = -1;
                                this.Map.mapDrawer.MapMeshDirty(chalk.Position, MapMeshFlag.Things, true, false);
                            }
                        }
                    }
                }
            };

            yield return(waitingTime);


            for (int i = 0; i < 3; i++)
            {
                Toil teachingTime = new Toil();
                teachingTime.defaultCompleteMode  = ToilCompleteMode.Delay;
                TeachingUtility.remainingDuration = TeachingUtility.ritualDuration;
                teachingTime.defaultDuration      = TeachingUtility.remainingDuration - 120;
                teachingTime.initAction           = delegate
                {
                    string s = TeachingUtility.getLeaderType(this.pawn);
                    foreach (Building_Chalkboard chalk in chalkboards)
                    {
                        if (chalk != null)
                        {
                            if (s == "leader1")
                            {
                                chalk.state = 1;
                            }
                            else if (s == "leader2")
                            {
                                chalk.state = 2;
                            }
                            else if (s == "leader3")
                            {
                                chalk.state = 3;
                            }
                            else if (s == "leader4")
                            {
                                chalk.state = 4;
                            }
                            chalk.frame++;
                            this.Map.mapDrawer.MapMeshDirty(chalk.Position, MapMeshFlag.Things, true, false);
                        }
                    }

                    report = "TeachingDesc".Translate();

                    MoteMaker.MakeInteractionBubble(this.pawn, null, ThingDefOf.Mote_Speech, iconList(this.pawn).RandomElement());
                };

                teachingTime.tickAction = delegate
                {
                    Pawn actor = this.pawn;
                    actor.skills.Learn(SkillDefOf.Social, 0.25f);
                    actor.GainComfortFromCellIfPossible();
                };

                yield return(teachingTime);
            }



            Toil finishingTime = new Toil();

            finishingTime.defaultCompleteMode = ToilCompleteMode.Delay;
            TeachingUtility.remainingDuration = TeachingUtility.ritualDuration;
            finishingTime.defaultDuration     = TeachingUtility.remainingDuration - 360;
            finishingTime.WithProgressBarToilDelay(TargetIndex.A, false, -0.5f);
            finishingTime.initAction = delegate
            {
                report = "FinishLessonDesc".Translate();
                MoteMaker.MakeInteractionBubble(this.pawn, null, ThingDefOf.Mote_Speech, iconList(this.pawn).RandomElement());
            };

            finishingTime.tickAction = delegate
            {
                if (tickC == 120 || tickC == 240 || tickC == 360)
                {
                    foreach (Building_Chalkboard chalk in chalkboards)
                    {
                        if (chalk != null)
                        {
                            if (chalk.frame > -1)
                            {
                                chalk.frame--;
                            }
                            this.Map.mapDrawer.MapMeshDirty(chalk.Position, MapMeshFlag.Things, true, false);
                        }
                    }
                }
                Pawn actor = this.pawn;
                actor.skills.Learn(SkillDefOf.Social, 0.25f);
                actor.GainComfortFromCellIfPossible();
                tickC++;
            };

            yield return(finishingTime);

            yield return(new Toil
            {
                initAction = delegate
                {
                    tickC = 0;
                    TeachingUtility.TeachingComplete(this.pawn, Spot);
                },
                defaultCompleteMode = ToilCompleteMode.Instant
            });

            yield return(new Toil
            {
                initAction = delegate
                {
                    if (Spot != null)
                    {
                        if (Spot.currentLessonState != Building_TeachingSpot.LessonState.finished)
                        {
                            Spot.ChangeState(Building_TeachingSpot.State.lesson, Building_TeachingSpot.LessonState.finished);
                            //Map.GetComponent<MapComponent_SacrificeTracker>().ClearVariables();
                        }
                    }
                },
                defaultCompleteMode = ToilCompleteMode.Instant
            });


            this.AddFinishAction(() =>
            {
                foreach (Building_Chalkboard chalk in chalkboards)
                {
                    if (chalk != null)
                    {
                        chalk.frame = 0; chalk.state = 0; this.Map.mapDrawer.MapMeshDirty(chalk.Position, MapMeshFlag.Things, true, false);
                    }
                }

                if (Spot.currentLessonState == Building_TeachingSpot.LessonState.finishing ||
                    Spot.currentLessonState == Building_TeachingSpot.LessonState.finished)
                {
                    this.pawn.needs.mood.thoughts.memories.TryGainMemory(ThoughtDef.Named("TaughtCL"), null);
                }
            });

            yield break;
        }