コード例 #1
0
 public static void EntitySpawn(Entity ent, bool isActive)
 {
     //string state = isActive ? "spawned" : "despawned";
     //DebugManager.LogToFile("[OnEntitySpawn] Entity " + ent.name + " has " + state);
     VarHelper.AddEnts(ent, isActive);
     OnEntitySpawn?.Invoke(ent, isActive);
 }
コード例 #2
0
 public GameObject AddAndInitCustomSystem <T>(GameObject go, out T sysIns) where T : Entity
 {
     if (go.AddComponent <T>() is T entity)
     {
         OnEntitySpawn?.Invoke(this, new OnEntitySpawn(entity));
         entity.Init();
         sysIns = entity;
         return(go);
     }
     else
     {
         throw new Exception($"添加组件{typeof(T).Name}失败");
     }
 }
コード例 #3
0
ファイル: ObjectMgr.cs プロジェクト: coolzoom/MeshViewer
        /// <summary>
        /// Called every few milliseconds. This function updates the local cache of known entities.
        /// </summary>
        public void Update()
        {
            // 8B 34 8A 8B 0D ?? ?? ?? ?? 89 81 ?? ?? ?? ?? 8B 15 ?? ?? ?? ??
            // http://i.imgur.com/LIGX6AY.png
            _currentManager = Game.Read <IntPtr>(Game.Read <int>(0x009BE7E0) + 0x463C, true);
            _localGUID      = Game.Read <ulong>(_currentManager + 0xC8, true);

            CurrentMap = Game.Read <int>(_currentManager + 0xD4, true);

            foreach (var oldEntitiy in _entities)
            {
                oldEntitiy.Value.BaseAddressUpdated = false;
            }

            foreach (var newEntityPtr in Enumerate())
            {
                var updateFieldOffset = Game.Read <IntPtr>(newEntityPtr + 0xC, true);
                var objectGuid        = Game.Read <ObjectGuid>(updateFieldOffset, true);

                if (_entities.ContainsKey(objectGuid))
                {
                    _entities[objectGuid].UpdateBaseAddress(newEntityPtr);
                    OnEntityUpdated?.Invoke(_entities[objectGuid]);
                }
                else
                {
                    switch (Game.Read <ObjectType>(newEntityPtr + 0x14, true))
                    {
                    default:
                    case ObjectType.Object:
                        _entities[objectGuid] = new CGObject_C(newEntityPtr);
                        break;

                    case ObjectType.Unit:
                        _entities[objectGuid] = new CGUnit_C(newEntityPtr);
                        break;

                    case ObjectType.Player:
                        _entities[objectGuid] = new CGPlayer_C(newEntityPtr);
                        break;

                    case ObjectType.GameObject:
                        _entities[objectGuid] = new CGGameObject_C(newEntityPtr);
                        break;

                    case ObjectType.Container:
                        _entities[objectGuid] = new CGContainer_C(newEntityPtr);
                        break;

                    case ObjectType.Item:
                        _entities[objectGuid] = new CGItem_C(newEntityPtr);
                        break;
                    }

                    OnEntitySpawn?.Invoke(_entities[objectGuid]);
                    _entities[objectGuid].OnSpawn();
                }
            }

            foreach (var removalKey in _entities.Where(kv => !kv.Value.BaseAddressUpdated).Select(kv => kv.Key).ToList())
            {
                OnEntityDespawn?.Invoke(_entities[removalKey]);
                _entities[removalKey].OnDespawn();

                _entities.Remove(removalKey);
            }

            OnWorldUpdate?.Invoke();
        }