Exemple #1
0
        public Toil TakeBookFromBookshelf(TargetIndex ind, Pawn reader, TargetIndex bookInd)
        {
            Toil takeBook = new Toil();

            takeBook.initAction = delegate
            {
                bool      flag      = true;
                Pawn      actor     = takeBook.actor;
                Bookshelf bookshelf = (Bookshelf)actor.jobs.curJob.GetTarget(ind).Thing;
                Thing     thing     = bookshelf.JobBook(reader);
                if (thing == null)
                {
                    actor.jobs.curDriver.EndJobWith(JobCondition.Incompletable);
                }
                else
                {
                    ReadableBooks readableBooks = thing as ReadableBooks;
                    readableBooks.currentReader = reader;
                    actor.carryTracker.TryStartCarry(readableBooks);
                    actor.jobs.curJob.targetB = actor.carryTracker.CarriedThing;
                }
                if (flag)
                {
                    if (this.pawn.Map.reservationManager.FirstReserverOf(bookshelf, bookshelf.Faction) == reader)
                    {
                        this.pawn.Map.reservationManager.Release(bookshelf, reader);
                    }
                }
            };
            takeBook.defaultCompleteMode = ToilCompleteMode.Delay;
            takeBook.defaultDuration     = 20;
            return(takeBook);
        }
Exemple #2
0
 public Toil ReadEnd(Pawn reader, TargetIndex bookInd, TargetIndex BookShelfInd)
 {
     return(new Toil
     {
         initAction = delegate
         {
             Bookshelf bookshelf = (Bookshelf)reader.jobs.curJob.GetTarget(BookShelfInd).Thing;
             ReadableBooks readableBooks = (ReadableBooks)reader.jobs.curJob.GetTarget(bookInd).Thing;
         },
         defaultCompleteMode = ToilCompleteMode.Instant
     });
 }
        public static Toil PlaceBookInShelf(TargetIndex book, TargetIndex shelf, Pawn pawn)
        {
            ReadableBooks bookint   = (ReadableBooks)pawn.jobs.curJob.GetTarget(book).Thing;
            Bookshelf     bookshelf = (Bookshelf)pawn.jobs.curJob.GetTarget(shelf).Thing;

            Log.Message("Trying to place book");
            Toil toil = new Toil();

            toil.defaultCompleteMode = ToilCompleteMode.Instant;
            toil.AddPreInitAction(delegate
            {
                bookint.Destroy(DestroyMode.Vanish);
                bookshelf.AddBookToLibrary(bookint.Tdef);
            });
            return(toil);
        }
        public void ReadCorruptionTick(Pawn pawn, ReadableBooks book)
        {
            Need_Soul soul = pawn.needs.TryGetNeed <Need_Soul>();

            if (soul != null)
            {
                float num;
                int   sign = 0;
                switch (book.Tdef.soulItemCategory)
                {
                case (SoulItemCategories.Neutral):
                {
                    sign = 0;
                    break;
                }

                case (SoulItemCategories.Corruption):
                {
                    sign = -1;
                    break;
                }

                case (SoulItemCategories.Redemption):
                {
                    sign = 1;
                    break;
                }

                default:
                {
                    Log.Error("No Soul Item Category Found");
                    break;
                }
                }
                num = sign * this.Tdef.SoulGainRate * 0.2f / 1200;
                soul.GainNeed(num);
            }
        }
Exemple #5
0
        public Toil ReadingBook(Pawn reader, int durationMultiplier, TargetIndex Ind, TargetIndex bookInd)
        {
            Toil          toil           = new Toil();
            List <string> text           = new List <string>();
            Bookshelf     thing          = null;
            ReadableBooks thingBook      = null;
            int           s              = 0;
            int           i              = 0;
            int           prog           = 0;
            int           oldprog        = 0;
            float         showTextFactor = 0;
            bool          tickOnce       = false;

            toil.tickAction = delegate
            {
                if (!tickOnce)
                {
                    thing         = (Bookshelf)reader.jobs.curJob.GetTarget(Ind).Thing;
                    thingBook     = (ReadableBooks)reader.jobs.curJob.GetTarget(bookInd).Thing;
                    this.tempbook = thingBook;
                    if (thingBook.PrepareText().Count > 0)
                    {
                        text = thingBook.PrepareText();
                    }
                    showTextFactor = thingBook.Tdef.TextSpeedShowFactor;
                    if (soul != null)
                    {
                        foreach (KeyValuePair <ThingDef, int> current in soul.readablesManager.ReadableProgressEntry)
                        {
                            if (current.Key.defName == thingBook.def.defName)
                            {
                                prog    = current.Value;
                                oldprog = prog;
                                s       = current.Value / 150;
                                Log.Message("Old Progression Found: " + prog.ToString());
                                break;
                            }
                        }
                    }
                    thingBook.TexChange = true;
                    tickOnce            = true;
                }
                if (thingBook.Tdef.SkillToLearn != null)
                {
                    this.pawn.skills.Learn(thingBook.Tdef.SkillToLearn, thingBook.Tdef.SkillGainFactor * 1f);
                }
                prog += 1;
                if (text.Count > 0)
                {
                    if (i > showTextFactor * 150)
                    {
                        if (text.Count > s)
                        {
                            MoteMaker.ThrowText(reader.TrueCenter() + new Vector3(0f, 0f, 0.7f), thingBook.Map, text.ElementAt(s), Color.green);
                            reader.needs.joy.CurLevel += 0.03f;
                            s++;
                            thingBook.ReadCorruptionTick(this.pawn, thingBook);
                            i = 0;
                        }
                    }
                    i++;
                }

                reader.Drawer.rotator.FaceCell(thingBook.Position);
            };
            toil.defaultCompleteMode = ToilCompleteMode.Delay;
            toil.FailOnDespawnedOrNull(TargetIndex.B);
            toil.defaultDuration = durationMultiplier;
            toil.AddFinishAction(delegate
            {
                if (soul != null)
                {
                    Dictionary <ThingDef, int> entries = soul.readablesManager.ReadableProgressEntry;
                    if (entries.ContainsKey(thingBook.def))
                    {
                        entries[thingBook.def] = prog;
                    }
                    else
                    {
                        Log.Message("Adding Entry");
                        entries.Add(thingBook.def, prog);
                    }
                }
                thingBook.PostReadEffectSelection(prog, oldprog);
                thingBook.TexChange = false;
                this.tempshelf      = thing;
                this.tempbook       = thingBook;
            });

            return(toil);
        }