public override void TryConsume(GameObject feederGO, GameObject eaterGO) { var eater = eaterGO.GetComponent <PlayerScript>(); if (eater == null) { // todo: implement non-player eating SoundManager.PlayNetworkedAtPos(sound, eater.WorldPos); Despawn.ServerSingle(gameObject); return; } var feeder = feederGO.GetComponent <PlayerScript>(); // Show eater message var eaterHungerState = eater.playerHealth.Metabolism.HungerState; ConsumableTextUtils.SendGenericConsumeMessage(feeder, eater, eaterHungerState, Name, "eat"); // Check if eater can eat anything if (feeder != eater) //If you're feeding it to someone else. { //Wait 3 seconds before you can feed StandardProgressAction.Create(ProgressConfig, () => { ConsumableTextUtils.SendGenericForceFeedMessage(feeder, eater, eaterHungerState, Name, "eat"); Eat(eater, feeder); }).ServerStartProgress(eater.registerTile, 3f, feeder.gameObject); return; } else { Eat(eater, feeder); } }
public override void TryConsume(GameObject feederGO, GameObject eaterGO) { if (!container) { return; } // todo: make seperate logic for NPC var eater = eaterGO.GetComponent <PlayerScript>(); var feeder = feederGO.GetComponent <PlayerScript>(); if (eater == null || feeder == null) { return; } // Check if player is wearing clothing that prevents eating or drinking if (eater.Equipment.CanConsume() == false) { Chat.AddExamineMsgFromServer(eater.gameObject, $"Remove items that cover your mouth first!"); return; } // Check if container is empty var reagentUnits = container.ReagentMixTotal; if (reagentUnits <= 0f) { Chat.AddExamineMsgFromServer(eater.gameObject, $"The {gameObject.ExpensiveName()} is empty."); return; } // Get current container name var name = itemAttributes ? itemAttributes.ArticleName : gameObject.ExpensiveName(); // Generate message to player ConsumableTextUtils.SendGenericConsumeMessage(feeder, eater, HungerState.Hungry, name, "drink"); if (feeder != eater) //If you're feeding it to someone else. { //Wait 3 seconds before you can feed StandardProgressAction.Create(ProgressConfig, () => { ConsumableTextUtils.SendGenericForceFeedMessage(feeder, eater, HungerState.Hungry, name, "drink"); Drink(eater, feeder); }).ServerStartProgress(eater.registerTile, 3f, feeder.gameObject); return; } else { Drink(eater, feeder); } }
public override void TryConsume(GameObject feederGO, GameObject eaterGO) { var eater = eaterGO.GetComponent <PlayerScript>(); if (eater == null) { // todo: implement non-player eating AudioSourceParameters eatSoundParameters = new AudioSourceParameters(pitch: RandomPitch); SoundManager.PlayNetworkedAtPos(sound, item.WorldPosition, eatSoundParameters); if (leavings != null) { Spawn.ServerPrefab(leavings, item.WorldPosition, transform.parent); } _ = Despawn.ServerSingle(gameObject); return; } var feeder = feederGO.GetComponent <PlayerScript>(); // Check if player is wearing clothing that prevents eating or drinking if (eater.Equipment.CanConsume() == false) { Chat.AddExamineMsgFromServer(eater.gameObject, $"Remove items that cover your mouth first!"); return; } // Show eater message var eaterHungerState = eater.playerHealth.HungerState; ConsumableTextUtils.SendGenericConsumeMessage(feeder, eater, eaterHungerState, Name, "eat"); // Check if eater can eat anything if (eaterHungerState != HungerState.Full) { if (feeder != eater) //If you're feeding it to someone else. { //Wait 3 seconds before you can feed StandardProgressAction.Create(ProgressConfig, () => { ConsumableTextUtils.SendGenericForceFeedMessage(feeder, eater, eaterHungerState, Name, "eat"); Eat(eater, feeder); }).ServerStartProgress(eater.registerTile, 3f, feeder.gameObject); return; } else { Eat(eater, feeder); } } }