Beispiel #1
0
        public void OnModMessageReceived(object sender, ModMessageReceivedEventArgs e)
        {
#if DEBUG
            ModEntry.ModMonitor.Log($"Received message.\n\tFromPlayer: \"{e.FromPlayerID}\"\n\tFromMod: \"{e.FromModID}\"\n\tType: \"{e.Type}\"", LogLevel.Trace);
#endif

            Type messageType = typeof(EmoteMessage);
            if (e.FromModID != helper.ModRegistry.ModID || e.Type != messageType.ToString())
            {
                return;
            }

            EmoteMessage message = e.ReadAs <EmoteMessage>();

            switch (message.EmoteSourceType)
            {
            case CharacterType.Farmer:
                if (long.TryParse(message.EmoteSourceId, out long farmerId))
                {
                    Farmer farmer = Game1.getFarmer(farmerId);
                    if (farmer != null)
                    {
                        FarmerPatch.DoEmotePatch.Instance.PostfixEnabled = false;
                        farmer.IsEmoting = false;
                        farmer.doEmote(message.EmoteIndex);
                        FarmerPatch.DoEmotePatch.Instance.PostfixEnabled = true;
                    }
                }
                break;

            case CharacterType.NPC:
                NPC npc = Game1.getCharacterFromName(message.EmoteSourceId);
                if (npc != null && !npc.IsEmoting)
                {
                    CharacterPatch.DoEmotePatch.Instance.PostfixEnabled = false;
                    npc.IsEmoting = false;
                    npc.doEmote(message.EmoteIndex);
                    CharacterPatch.DoEmotePatch.Instance.PostfixEnabled = true;
                }
                break;

            case CharacterType.FarmAnimal:
                if (long.TryParse(message.EmoteSourceId, out long farmAnimalId))
                {
                    FarmAnimal farmAnimal = Game1.getFarm().getAllFarmAnimals().FirstOrDefault(x => x?.myID.Value == farmAnimalId);
                    if (farmAnimal != null && !farmAnimal.IsEmoting)
                    {
                        CharacterPatch.DoEmotePatch.Instance.PostfixEnabled = false;
                        farmAnimal.IsEmoting = false;
                        farmAnimal.doEmote(message.EmoteIndex);
                        CharacterPatch.DoEmotePatch.Instance.PostfixEnabled = true;
                    }
                }
                break;

            case CharacterType.Unknown:
            default:
                break;
            }
        }
Beispiel #2
0
        public void Send(EmoteMessage message)
        {
            Type messageType = typeof(EmoteMessage);

#if DEBUG
            ModEntry.ModMonitor.Log($"Sending message.\n\tFromPlayer: \"{Game1.player.UniqueMultiplayerID}\"\n\tFromMod: \"{helper.ModRegistry.ModID}\"\n\tType: \"{messageType}\"", LogLevel.Trace);
#endif
            helper.Multiplayer.SendMessage(message, messageType.ToString(), new[] { helper.ModRegistry.ModID });
        }