Beispiel #1
0
        public override void Load(bool startup)
        {
            command = new CmdCustomModel();
            Command.Register(command);

            OnPlayerConnectEvent.Register(OnPlayerConnect, Priority.Low);
            OnPlayerDisconnectEvent.Register(OnPlayerDisconnect, Priority.Low);
            OnJoiningLevelEvent.Register(OnJoiningLevel, Priority.Low);
            OnJoinedLevelEvent.Register(OnJoinedLevel, Priority.Low);
            OnSendingModelEvent.Register(OnSendingModel, Priority.Low);
            OnPlayerCommandEvent.Register(OnPlayerCommand, Priority.Low);
            // OnEntitySpawnedEvent.Register(OnEntitySpawned, Priority.Low);

            Directory.CreateDirectory(PublicModelsDirectory);
            Directory.CreateDirectory(PersonalModelsDirectory);

            int numModels         = CreateMissingCCModels(false);
            int numPersonalModels = CreateMissingCCModels(true);

            Logger.Log(
                LogType.SystemActivity,
                "CustomModels Loaded with {0} Models and {1} Personal Models",
                numModels,
                numPersonalModels
                );

            // initialize because of a late plugin load
            foreach (Player p in PlayerInfo.Online.Items)
            {
                SentCustomModels.TryAdd(p.name, new HashSet <string>(StringComparer.OrdinalIgnoreCase));
                ModelNameToIdForPlayer.TryAdd(p.name, new ConcurrentDictionary <string, byte>(StringComparer.OrdinalIgnoreCase));
            }
        }
        protected override void UnhookEventHandlers()
        {
            OnEntitySpawnedEvent.Unregister(HandleEntitySpawned);
            OnTabListEntryAddedEvent.Unregister(HandleTabListEntryAdded);
            OnMoneyChangedEvent.Unregister(HandleMoneyChanged);
            OnBlockChangeEvent.Unregister(HandleBlockChange);
            OnSendingModelEvent.Unregister(HandleSendingModel);

            OnPlayerConnectEvent.Unregister(HandlePlayerConnect);
            OnPlayerMoveEvent.Unregister(HandlePlayerMove);
            OnPlayerSpawningEvent.Unregister(HandlePlayerSpawning);
            OnJoinedLevelEvent.Unregister(HandleJoinedLevel);
            OnPlayerChatEvent.Unregister(HandlePlayerChat);

            base.UnhookEventHandlers();
        }
        protected override void HookEventHandlers()
        {
            OnEntitySpawnedEvent.Register(HandleEntitySpawned, Priority.High);
            OnTabListEntryAddedEvent.Register(HandleTabListEntryAdded, Priority.High);
            OnMoneyChangedEvent.Register(HandleMoneyChanged, Priority.High);
            OnBlockChangeEvent.Register(HandleBlockChange, Priority.High);
            OnSendingModelEvent.Register(HandleSendingModel, Priority.High);

            OnPlayerConnectEvent.Register(HandlePlayerConnect, Priority.High);
            OnPlayerMoveEvent.Register(HandlePlayerMove, Priority.High);
            OnPlayerSpawningEvent.Register(HandlePlayerSpawning, Priority.High);
            OnJoinedLevelEvent.Register(HandleJoinedLevel, Priority.High);
            OnPlayerChatEvent.Register(HandlePlayerChat, Priority.High);

            base.HookEventHandlers();
        }
Beispiel #4
0
        public override void Unload(bool shutdown)
        {
            SentCustomModels.Clear();
            ModelNameToIdForPlayer.Clear();

            OnPlayerConnectEvent.Unregister(OnPlayerConnect);
            OnPlayerDisconnectEvent.Unregister(OnPlayerDisconnect);
            OnJoiningLevelEvent.Unregister(OnJoiningLevel);
            OnJoinedLevelEvent.Unregister(OnJoinedLevel);
            OnSendingModelEvent.Unregister(OnSendingModel);
            OnPlayerCommandEvent.Unregister(OnPlayerCommand);
            // OnEntitySpawnedEvent.Unregister(OnEntitySpawned);

            if (command != null)
            {
                Command.Unregister(command);
                command = null;
            }
        }
Beispiel #5
0
        static void SpawnRaw(Player dst, byte id, Entity e, Position pos, Orientation rot,
                             string skin, string name, string model)
        {
            dst.Session.SendSpawnEntity(id, name, skin, pos, rot);

            if (dst.hasChangeModel)
            {
                OnSendingModelEvent.Call(e, ref model, dst);
                if (!model.CaselessEq("humanoid"))
                {
                    dst.Session.SendChangeModel(id, model);
                }
            }

            if (dst.Supports(CpeExt.EntityProperty))
            {
                dst.Send(Packet.EntityProperty(id, EntityProp.RotX, Orientation.PackedToDegrees(rot.RotX)));
                dst.Send(Packet.EntityProperty(id, EntityProp.RotZ, Orientation.PackedToDegrees(rot.RotZ)));
                SendModelScales(dst, id, e);
            }
        }
Beispiel #6
0
        static void SpawnRaw(Player dst, byte id, Entity e, Position pos, Orientation rot,
                             string skin, string name, string model)
        {
            // NOTE: Fix for standard clients
            if (id == Entities.SelfID)
            {
                pos.Y -= 22;
            }
            name = Colors.Cleanup(name, dst.hasTextColors);

            if (dst.Supports(CpeExt.ExtPlayerList, 2))
            {
                dst.Send(Packet.ExtAddEntity2(id, skin, name, pos, rot, dst.hasCP437, dst.hasExtPositions));
            }
            else if (dst.hasExtList)
            {
                dst.Send(Packet.ExtAddEntity(id, skin, name, dst.hasCP437));
                dst.Send(Packet.Teleport(id, pos, rot, dst.hasExtPositions));
            }
            else
            {
                dst.Send(Packet.AddEntity(id, name, pos, rot, dst.hasCP437, dst.hasExtPositions));
            }

            if (dst.hasChangeModel)
            {
                OnSendingModelEvent.Call(e, ref model, dst);
                if (!model.CaselessEq("humanoid"))
                {
                    SendModel(dst, id, model);
                }
            }

            if (dst.Supports(CpeExt.EntityProperty))
            {
                dst.Send(Packet.EntityProperty(id, EntityProp.RotX, Orientation.PackedToDegrees(rot.RotX)));
                dst.Send(Packet.EntityProperty(id, EntityProp.RotZ, Orientation.PackedToDegrees(rot.RotZ)));
                SendModelScales(dst, id, e);
            }
        }
Beispiel #7
0
        internal static void BroadcastModel(Entity e, string m)
        {
            Player[] players = PlayerInfo.Online.Items;
            Level    lvl     = e.Level;

            foreach (Player pl in players)
            {
                if (pl.level != lvl || !pl.hasChangeModel)
                {
                    continue;
                }
                if (!pl.CanSeeEntity(e))
                {
                    continue;
                }

                byte   id    = (pl == e) ? Entities.SelfID : e.EntityID;
                string model = Chat.Format(m, pl, true, false);

                OnSendingModelEvent.Call(e, ref model, pl);
                SendModel(pl, id, model);
                SendModelScales(pl, id, e);
            }
        }