public Collectable(int collectableId, Position position, Spacemap spacemap, bool respawnable, Player toPlayer) : base(Randoms.CreateRandomID(), position, spacemap)
        {
            Hash          = Randoms.GenerateHash(10);
            CollectableId = collectableId;
            Respawnable   = respawnable;
            ToPlayer      = toPlayer;

            if (this is CargoBox)
            {
                Program.TickManager.AddTick(this);
                disposeTime = DateTime.Now;
            }
        }
示例#2
0
 private void ForceChangeMap(Spacemap targetMap, Vector targetPosition, int vw = 0)
 {
     lock (JumpLock)
     {
         baseController.Player.State.Jumping = true;
         if (baseController.Player.Spacemap == targetMap)
         {
             return;
         }
         baseController.Player.MoveToMap(targetMap, targetPosition, vw);
         baseController.Player.State.Jumping = false;
         //World.DatabaseManager.AddPlayerLog(baseController.Player, PlayerLogTypes.SYSTEM, "Jumped to " + targetMap.Id + " AT " + targetPosition + " IN VW " + vw);
     }
 }
        public Collectable(int collectableId, Position position, Spacemap spacemap, bool respawnable, Player toPlayer)
        {
            CollectableId = collectableId;
            Hash          = Randoms.GenerateHash(16);
            Position      = position;
            Spacemap      = spacemap;
            Respawnable   = respawnable;
            ToPlayer      = toPlayer;
            Spacemap.Collectables.TryAdd(Hash, this);

            var tickId = -1;

            Program.TickManager.AddTick(this, out tickId);
            TickId = tickId;
        }
示例#4
0
        public Mine(Player player, Spacemap spacemap, Position position, int mineTypeId) : base(Randoms.CreateRandomID(), position, spacemap)
        {
            Hash       = Randoms.GenerateHash(10);
            Player     = player;
            MineTypeId = mineTypeId;

            Lance         = Player.Settings.InGameSettings.selectedFormation == DroneManager.LANCE_FORMATION;
            Detonation    = (Player.SkillTree.detonation1 + Player.SkillTree.detonation2 == 5);
            Pulse         = Player.SkillTree.explosives == 5;
            ExplodeRange += Maths.GetPercentage(ExplodeRange, Player.GetSkillPercentage("Explosives"));

            activationTime = DateTime.Now;

            Program.TickManager.AddTick(this);
        }
示例#5
0
        //TODO:
        public void Relog(Spacemap spacemap = null, Vector pos = null)
        {
            throw new NotImplementedException();
            Disconnect();
            if (spacemap != null)
            {
                Player.Spacemap = spacemap;
            }
            if (pos != null)
            {
                Player.ChangePosition(pos);
            }

            Player.Save();
            //Store();
        }
示例#6
0
        public Npc(int id, Ship ship, Spacemap spacemap, Position position) : base(id, ship.Name, 0, ship, position, spacemap, GameManager.GetClan(0))
        {
            Spacemap.AddCharacter(this);

            ShieldAbsorption = 0.8;

            Damage              = ship.Damage;
            MaxHitPoints        = ship.BaseHitpoints;
            CurrentHitPoints    = MaxHitPoints;
            MaxShieldPoints     = ship.BaseShieldPoints;
            CurrentShieldPoints = MaxShieldPoints;

            NpcAI = new NpcAI(this);

            Program.TickManager.AddTick(this);
        }
示例#7
0
 public virtual void Dispose()
 {
     try
     {
         GameClient.SendToSpacemap(Spacemap, netty.commands.new_client.DisposeBoxCommand.write(Hash, true));
         GameClient.SendToSpacemap(Spacemap, netty.commands.old_client.LegacyModule.write("0|2|" + Hash));
         Spacemap.RemoveObject(this);
         Disposed = true;
     }
     catch (Exception e)
     {
         Console.WriteLine(e);
         Console.WriteLine(e.Message);
         Console.WriteLine(e.StackTrace);
     }
 }
示例#8
0
        public static Vector Random(Spacemap map, Vector min = null, Vector max = null)
        {
            if (min == null)
            {
                min = map.Limits[0];
            }
            if (max == null)
            {
                max = map.Limits[1];
            }
            var random = RandomInstance.getInstance(map);

            var posX = random.Next(min.X, max.X);
            var posY = random.Next(min.Y, max.Y);

            return(new Vector(posX, posY));
        }
        public override void Dispose()
        {
            if (_disposed || !(_disposed = true))
            {
                return;
            }

            Lock(null);
            Spacemap?.Remove(this);

            GameManager.Remove(ID);
            UpdateState();

            base.Dispose();
            Connection?.Dispose(false);
            _logger.LogInformation($"['{Account.Username}'] unloaded!");
        }
示例#10
0
        public void Score(Faction faction, Jumpgate portal)
        {
            switch (faction)
            {
            case Faction.MMO:
                MMOScore++;
                foreach (var session in World.StorageManager.GameSessions.Values)
                {
                    if (session == null || !session.Player.Controller.Active)
                    {
                        continue;
                    }
                    Packet.Builder.SpaceBallUpdateScoreCommand(session, faction, MMOScore, portal.Id);
                }
                break;

            case Faction.EIC:
                EICScore++;
                foreach (var session in World.StorageManager.GameSessions.Values)
                {
                    if (session == null || !session.Player.Controller.Active)
                    {
                        continue;
                    }
                    Packet.Builder.SpaceBallUpdateScoreCommand(session, faction, EICScore, portal.Id);
                }
                break;

            case Faction.VRU:
                VRUScore++;
                foreach (var session in World.StorageManager.GameSessions.Values)
                {
                    if (session == null || !session.Player.Controller.Active)
                    {
                        continue;
                    }
                    Packet.Builder.SpaceBallUpdateScoreCommand(session, faction, VRUScore, portal.Id);
                }
                break;
            }

            for (var i = 0; i < 50; i++)
            {
                Spacemap.CreateLootBox(Vector.GetPosOnCircle(portal.Position, 50 * i), new Reward(RewardType.URIDIUM, 750), Types.BIG_PUMPKIN, 25000);
            }
        }
示例#11
0
        public void InitiateVirtualWorld()
        {
            var getVWID = Spacemap.VirtualWorlds.FirstOrDefault(x => x.Key != 0 && x.Value == null);

            VWID = getVWID.Key;
            if (VWID == 0)
            {
                VWID = Spacemap.VirtualWorlds.Count;
                Spacemap.VirtualWorlds.Add(VWID, null);
            }

            Spacemap vwMap;

            Spacemap.Duplicate(Spacemap, out vwMap);
            Spacemap.VirtualWorlds[VWID] = vwMap;
            CreateAssets();
            Initiate();
        }
示例#12
0
        protected Character(int id, string name, int factionId, Ship ship, Position position, Spacemap spacemap, Clan clan) : base(id)
        {
            Name      = name;
            FactionId = factionId;
            Ship      = ship;
            Position  = position;
            Spacemap  = spacemap;
            Clan      = clan;

            Storage = new Storage(this);

            Moving            = false;
            OldPosition       = new Position(0, 0);
            Destination       = position;
            Direction         = new Position(0, 0);
            MovementStartTime = new DateTime();
            MovementTime      = 0;
        }
示例#13
0
        public void ForceChangeMap(Spacemap targetMap, Vector targetPosition, int vw = 0)
        {
            if (baseController.Player.Spacemap == targetMap)
            {
                return;
            }
            //baseController.Player.Pet?.Controller.Deactivate();
            var gameSession = World.StorageManager.GetGameSession(baseController.Player.Id);

            //todo:fix
            //Packet.Builder.MapChangeCommand(gameSession);
            baseController.Destruction.Deselect(baseController.Player);
            gameSession.Relog(targetMap, targetPosition);
            gameSession.Player.VirtualWorldId = vw;
            //baseController.Player.Position = targetPosition;
            //baseController.Player.Spacemap = targetMap;
            //baseController.Player.Save();
        }
示例#14
0
 public static void SendToSpacemap(Spacemap spacemap, byte[] bytes)
 {
     try
     {
         foreach (var entry in spacemap.Entities)
         {
             var entity = entry.Value as Player;
             if (entity != null && (entity.Spacemap != null || entity.Position != null))
             {
                 World.StorageManager.GameSessions[entity.Id]?.Client.Send(bytes);
             }
         }
     }
     catch (Exception e)
     {
         Out.WriteLine("Something went wrong sending a spacemap packet.", "ERROR", ConsoleColor.Red);
         Debug.WriteLine(e.Message, "Debug Error");
     }
 }
示例#15
0
 public static void LoadMaps()
 {
     using (var mySqlClient = SqlDatabaseManager.GetClient())
     {
         var data = (DataTable)mySqlClient.ExecuteQueryTable("SELECT * FROM server_maps");
         foreach (DataRow row in data.Rows)
         {
             int    MapID      = Convert.ToInt32(row["mapID"]);
             string Name       = Convert.ToString(row["name"]);
             int    FactionID  = Convert.ToInt32(row["factionID"]);
             bool   PvpMap     = Convert.ToBoolean(row["isPvp"]);
             bool   StarterMap = Convert.ToBoolean(row["isStartedMap"]);
             var    Portals    = JsonConvert.DeserializeObject <List <PortalBase> >(row["portals"].ToString());
             var    Stations   = JsonConvert.DeserializeObject <List <StationBase> >(row["stations"].ToString());
             var    spacemap   = new Spacemap(MapID, Name, FactionID, StarterMap, PvpMap, Portals, Stations);
             GameManager.Spacemaps.TryAdd(spacemap.Id, spacemap);
         }
     }
 }
示例#16
0
        public void CreateBattleStation()
        {
            Building = false;
            var battleStation = new ClanBattleStation(Spacemap.GetNextObjectId(), AssignedBattleStationId, Name, Faction, new Vector(Position.X, Position.Y), Spacemap, Builder, EquippedModules);

            Spacemap.RemoveObject(this);
            GameClient.SendToSpacemap(Spacemap, netty.commands.old_client.AssetRemoveCommand.write(new netty.commands.old_client.AssetTypeModule((short)Type), Id));

            foreach (var module in EquippedModules.Values)
            {
                module.BattleStation = battleStation;
                if (module.SlotId == 0 || module.SlotId == 1)
                {
                    continue;
                }
                module.Position             = BattleStationModule.GetPos(battleStation.Position, module.SlotId);
                Spacemap.Objects[module.Id] = module;
            }

            Spacemap.AddObject(battleStation);
        }
        protected Character(int id, string name, int factionId, Ship ship, Position position, Spacemap spacemap, Clan clan) : base(id)
        {
            Name      = name;
            FactionId = factionId;
            Ship      = ship;
            Position  = position;
            Spacemap  = spacemap;
            Clan      = clan;

            Moving            = false;
            OldPosition       = new Position(0, 0);
            Destination       = position;
            Direction         = new Position(0, 0);
            MovementStartTime = new DateTime();
            MovementTime      = 0;

            if (clan == null)
            {
                Clan = GameManager.GetClan(0);
            }
        }
示例#18
0
        public static void LoadMaps()
        {
            using (var mySqlClient = SqlDatabaseManager.GetClient())
            {
                var data = (DataTable)mySqlClient.ExecuteQueryTable("SELECT * FROM server_maps");
                foreach (DataRow row in data.Rows)
                {
                    int    mapId     = Convert.ToInt32(row["mapID"]);
                    string name      = Convert.ToString(row["name"]);
                    int    factionId = Convert.ToInt32(row["factionID"]);
                    var    npcs      = JsonConvert.DeserializeObject <List <NpcsBase> >(row["npcs"].ToString());
                    var    portals   = JsonConvert.DeserializeObject <List <PortalBase> >(row["portals"].ToString());
                    var    stations  = JsonConvert.DeserializeObject <List <StationBase> >(row["stations"].ToString());
                    var    options   = JsonConvert.DeserializeObject <OptionsBase>(row["options"].ToString());
                    var    spacemap  = new Spacemap(mapId, name, factionId, npcs, portals, stations, options);
                    GameManager.Spacemaps.TryAdd(spacemap.Id, spacemap);
                }
            }

            LoadBattleStations();
        }
示例#19
0
        public static void Area(Spacemap map, Vector center, int radius, int amount, Types attackType, DamageType damageType = DamageType.DEFINED, bool playersOnly = true)
        {
            foreach (var entry in map.Entities.Where(x => x.Value.Position.DistanceTo(center) <= radius))
            {
                if (entry.Value is Player && playersOnly || !playersOnly)
                {
                    if (entry.Value.Invincible)
                    {
                        continue;
                    }
                    var damage = 0;
                    switch (damageType)
                    {
                    case DamageType.DEFINED:
                        damage = amount;
                        break;

                    case DamageType.PERCENTAGE:
                        damage = (int)(entry.Value.CurrentHealth * amount / 100.0);
                        break;
                    }
                    //TODO use Damage() method instead

                    entry.Value.CurrentHealth -= damage;
                    entry.Value.LastCombatTime = DateTime.Now;

                    foreach (var session in AssembleSelectedSessions(entry.Value))
                    {
                        Packet.Builder.AttackHitCommand(session, 0, entry.Value, damage, (short)attackType);
                    }

                    if (entry.Value.CurrentHealth <= 0 && entry.Value.EntityState == EntityStates.ALIVE)
                    {
                        entry.Value.Destroy();
                    }

                    entry.Value.Updaters.Update();
                }
            }
        }
示例#20
0
        public void Activate()
        {
            if (!Activated)
            {
                Activated = true;
                Destroyed = false;
                Spacemap  = Owner.Spacemap;
                Invisible = Owner.Invisible;
                Position  = new Position(Owner.Position.X, Owner.Position.Y);
                Owner.SendPacket("0|A|STM|msg_pet_activated");
                Initialization();
                Spacemap.AddCharacter(this);

                var tickId = -1;
                Program.TickManager.AddTick(this, out tickId);
                TickId = tickId;
            }
            else
            {
                Deactivate();
            }
        }
示例#21
0
        public void InitiateVirtualWorld()
        {
            var getVWID = Spacemap.VirtualWorlds.FirstOrDefault(x => x.Key != 0 && x.Value == null);

            VWID = getVWID.Key;
            if (VWID == 0)
            {
                VWID = Spacemap.VirtualWorlds.Count;
                Spacemap.VirtualWorlds.Add(VWID, null);
            }

            Spacemap vwMap;

            Spacemap.Duplicate(Spacemap, out vwMap);
            Spacemap.VirtualWorlds[VWID] = vwMap;
            vwMap.CreateHealthStation(new Vector(10400, 6400));
            vwMap.CreateRelayStation(new Vector(2500, 2000));
            vwMap.CreateRelayStation(new Vector(6200, 11700));
            vwMap.CreateRelayStation(new Vector(18300, 10900));
            vwMap.CreateRelayStation(new Vector(18200, 4000));
            Initiate();
        }
        public override void Die()
        {
            PlayerEffectsAssembly.CureInfection(true);
            MovementAssembly.Move(MovementAssembly.ActualPosition(), MovementAssembly.ActualPosition());

            Lock(null);
            EntitiesLockedSafe(x => {
                if (x.Locked != null && x.Locked.ID == ID)
                {
                    x.Lock(null);
                }
            });

            ICommand killCommand = PacketBuilder.KillCommand(this);

            GameManager.Get(AttackTraceAssembly.CurrentMainAttacker, out PlayerController killer);
            Send(killCommand, PacketBuilder.KillScreen.KillScreenCommand(DestructionTypeModule.PLAYER, killer));
            // send kill screen

            EntitesInRange(x => {
                if (x.ID == AttackTraceAssembly.CurrentMainAttacker)   // killer
                                                                       // render rewards etc.
                {
                    x.Send(
                        killCommand,
                        PacketBuilder.Legacy("0|A|STD|You killed " + Account.Username + "!")
                        );
                }
                else
                {
                    x.Send(killCommand);
                }
            });

            AttackTraceAssembly.Reset();
            Spacemap?.Remove(this); // remove from spacemap
            TimerStop();
        }
示例#23
0
        public void Deactivate(bool direct = false, bool destroyed = false)
        {
            if (Activated)
            {
                if (LastCombatTime.AddSeconds(10) < DateTime.Now || direct)
                {
                    Owner.SendPacket("0|PET|D");

                    if (destroyed)
                    {
                        Owner.Settings.InGameSettings.petDestroyed = true;
                        QueryManager.SavePlayer.Settings(Owner, "inGameSettings", Owner.Settings.InGameSettings);

                        Owner.SendPacket("0|PET|Z");
                        CurrentShieldPoints = 0;
                        UpdateStatus();

                        Owner.SendCommand(PetInitializationCommand.write(true, true, false));
                        Owner.SendCommand(PetUIRepairButtonCommand.write(true, 250));
                    }
                    else
                    {
                        Owner.SendPacket("0|A|STM|msg_pet_deactivated");
                    }

                    Activated = false;

                    Deselection();
                    Spacemap.RemoveCharacter(this);
                    InRangeCharacters.Clear();
                    Program.TickManager.RemoveTick(this);
                }
                else
                {
                    Owner.SendPacket("0|A|STM|msg_pet_in_combat");
                }
            }
        }
示例#24
0
        public void Activate()
        {
            if (!Activated && !Owner.Settings.InGameSettings.petDestroyed)
            {
                Activated = true;

                CurrentHitPoints = 2500;

                SetPosition(Owner.Position);
                Spacemap  = Owner.Spacemap;
                Invisible = Owner.Invisible;

                Owner.SendPacket("0|A|STM|msg_pet_activated");

                Initialization(GearId);

                Spacemap.AddCharacter(this);
                Program.TickManager.AddTick(this);
            }
            else
            {
                Deactivate();
            }
        }
        public static Position Random(Spacemap map, int minX = 0, int maxX = 0, int minY = 0, int maxY = 0)
        {
            if (minX == 0)
            {
                minX = map.Limits[0].X;
            }
            if (minY == 0)
            {
                minY = map.Limits[0].Y;
            }
            if (maxX == 0)
            {
                maxX = map.Limits[1].X;
            }
            if (maxY == 0)
            {
                maxY = map.Limits[1].Y;
            }

            var posX = Randoms.random.Next(minX, maxX);
            var posY = Randoms.random.Next(minY, maxY);

            return(new Position(posX, posY));
        }
示例#26
0
文件: Ore.cs 项目: geo-vi/NettyBaseTD
 public void Dispose()
 {
     //GameClient.SendToSpacemap(Spacemap, netty.commands.old_client.LegacyModule.write("0|q|" + Hash));
     Spacemap.RemoveObject(this);
     Disposed = true;
 }
示例#27
0
文件: Ore.cs 项目: geo-vi/NettyBaseTD
 public Ore(int id, string hash, OreTypes type, Vector pos, Spacemap map, int[] limits) : base(id, pos, map)
 {
     Hash   = hash;
     Type   = type;
     Limits = limits;
 }
示例#28
0
 public BonusBox(int collectableId, Position position, Spacemap spacemap, bool respawnable, Player toPlayer = null) : base(collectableId, position, spacemap, respawnable, toPlayer)
 {
 }
示例#29
0
 public PM00(int id, string hash, Vector pos, Spacemap map) : base(id, hash, pos, map)
 {
 }
示例#30
0
 public EpsilonGate(Spacemap coreMap, int wave) : base(coreMap, wave)
 {
 }