private bool TryHealFarmer() { if (this.medkits > 0 && this.player.health < this.player.maxHealth && this.player.health > 0) { int healthBonus = (this.player.maxHealth / 100) * (this.player.getFriendshipHeartLevelForNPC(this.npc.Name) / 2); // % health bonus based on friendship hearts int health = Math.Max(10, (1 / this.player.health * 10) + Game1.random.Next(0, (int)(this.player.maxHealth * .1f))) + healthBonus; this.player.health += health; this.healCooldown = HEAL_COUNTDOWN; this.medkits--; if (this.player.health > this.player.maxHealth) { this.player.health = this.player.maxHealth; } Game1.drawDialogue(this.npc, DialogueHelper.GetDialogueString(this.npc, "heal")); Game1.addHUDMessage(new HUDMessage(this.Csm.ContentLoader.LoadString("Strings/Strings:healed", this.npc.displayName, health), HUDMessage.health_type)); this.hud.GlowSkill("doctor", Color.Lime, HEAL_COUNTDOWN / 60); this.Monitor.Log($"{this.npc.Name} healed you! Remaining medkits: {this.medkits}", LogLevel.Info); return(true); } if (this.medkits == 0) { this.Monitor.Log($"No medkits. {this.npc.Name} can't heal you!", LogLevel.Info); Game1.drawDialogue(this.npc, DialogueHelper.GetDialogueString(this.npc, "nomedkits")); this.medkits = -1; } return(false); }
private void GameLoop_TimeChanged(object sender, TimeChangedEventArgs e) { this.StateMachine.Companion.clearSchedule(); if (e.NewTime >= 2200) { NPC companion = this.StateMachine.Companion; Dialogue dismissalDialogue = new Dialogue(DialogueHelper.GetDialogueString(companion, "companionDismissAuto"), companion); this.dismissalDialogue = dismissalDialogue; this.StateMachine.Companion.doEmote(24); this.StateMachine.Companion.updateEmote(Game1.currentGameTime); DialogueHelper.DrawDialogue(dismissalDialogue); } MineShaft mines = this.StateMachine.Companion.currentLocation as MineShaft; // Fix spawn ladder if area is infested and all monsters is killed but NPC following us if (mines != null && mines.mustKillAllMonstersToAdvance()) { var monsters = from c in mines.characters where c.IsMonster select c; if (monsters.Count() == 0) { Vector2 vector2 = this.StateMachine.Reflection.GetProperty <Vector2>(mines, "tileBeneathLadder").GetValue(); if (mines.getTileIndexAt(Utility.Vector2ToPoint(vector2), "Buildings") == -1) { mines.createLadderAt(vector2, "newArtifact"); } } } }
private void ReactOnAsk(NPC companion, Farmer leader, string action) { switch (action) { case "dismiss": Dialogue dismissalDialogue = new Dialogue(DialogueHelper.GetDialogueString(companion, "companionDismiss"), companion); this.dismissalDialogue = dismissalDialogue; DialogueHelper.DrawDialogue(dismissalDialogue); break; case "bag": Chest bag = this.StateMachine.Bag; this.StateMachine.Companion.currentLocation.playSound("openBox"); Game1.activeClickableMenu = new ItemGrabMenu(bag.items, false, true, new InventoryMenu.highlightThisItem(InventoryMenu.highlightAllItems), new ItemGrabMenu.behaviorOnItemSelect(bag.grabItemFromInventory), this.StateMachine.Companion.displayName, new ItemGrabMenu.behaviorOnItemSelect(bag.grabItemFromChest), false, true, true, true, true, 1, null, -1, this.StateMachine.Companion); break; } }
private void ReactOnAnswer(NPC n, Farmer leader) { if (leader.getFriendshipHeartLevelForNPC(n.Name) <= 4 || Game1.timeOfDay >= 2200) { Dialogue rejectionDialogue = new Dialogue( DialogueHelper.GetDialogueString( n, Game1.timeOfDay >= 2200 ? "companionRejectedNight" : "companionRejected"), n); this.rejectionDialogue = rejectionDialogue; DialogueHelper.DrawDialogue(rejectionDialogue); } else { Dialogue acceptalDialogue = new Dialogue(DialogueHelper.GetDialogueString(n, "companionAccepted"), n); this.acceptalDialogue = acceptalDialogue; DialogueHelper.DrawDialogue(acceptalDialogue); } }