Esempio n. 1
0
        private void LoadPets()
        {
            if (!Manager.Config.serverSettings.enablePets)
            {
                return;
            }

            var removedPet = false;
            var acc        = _client.Account;

            foreach (var petId in acc.PetList)
            {
                var dbPet = new DbPet(acc, petId);
                if (dbPet.ObjectType == 0)
                {
                    removedPet = true;
                    Manager.Database.RemovePet(acc, petId);
                    continue;
                }

                var pet  = new Pet(Manager, null, dbPet);
                var sPos = GetPetSpawnPosition();
                pet.Move(sPos.X, sPos.Y);
                EnterWorld(pet);
            }
            if (removedPet)
            {
                _client.Account.Reload();
            }
        }
Esempio n. 2
0
        public PetAbility(Pet owner, DbPet dbPet, int abilityId)
        {
            _owner     = owner;
            _abilityId = abilityId;

            var ability = dbPet.Ability[abilityId];

            Type  = ability.Type;
            Level = ability.Level;
            Power = ability.Power;

            _nextPowerGoal = Pet.GetNeededPower(Level);
        }
Esempio n. 3
0
 public static Pet FromDb(DbPet dbPet)
 {
     if (dbPet == null || dbPet.IsNull)
     {
         return(null);
     }
     return(new Pet
     {
         InstanceId = dbPet.PetId,
         MaxAbilityPower = dbPet.MaxLevel,
         Rarity = (int)dbPet.Rarity,
         Skin = Program.Resources.GameData.PetSkins[Program.Resources.GameData.IdToObjectType[Program.Resources.GameData.Pets[dbPet.ObjectType].DefaultSkin]].ObjectType,
         SkinName = Program.Resources.GameData.Pets[dbPet.ObjectType].DefaultSkin,
         Type = dbPet.ObjectType,
         Abilities = PetAbility.LoadFromDb(dbPet.Ability)
     });
 }
Esempio n. 4
0
        public Pet(RealmManager manager, Player playerOwner, DbPet pet) : base(manager, pet.ObjectType)
        {
            PlayerOwner = playerOwner;
            _dbPet      = pet;

            var gameData = manager.Resources.GameData;
            var petDesc  = gameData.Pets[(pet.ObjectType == 0) ? (ushort)0x7f05 : pet.ObjectType];
            var petSkin  = gameData.PetSkins[gameData.IdToObjectType[petDesc.DefaultSkin]];

            Family = petDesc.Family;
            SkinId = petSkin.ObjectType;
            Skin   = petSkin.DisplayId;
            SetDefaultSize(petDesc.MinSize);

            PetId    = pet.PetId;
            Rarity   = pet.Rarity;
            MaxLevel = pet.MaxLevel;
            Ability  = new PetAbility[DbPet.NumAbilities];
            for (var i = 0; i < Ability.Length; i++)
            {
                Ability[i] = new PetAbility(this, pet, i);
            }
        }
        private void FusePet(Client client, PetUpgradeRequest packet)
        {
            var petYard = client.Player.Owner as realm.worlds.logic.PetYard;

            if (petYard == null)
            {
                return;
            }

            var pet1 = petYard.Pets.Values.SingleOrDefault(p => p.PetId == packet.PetId1);
            var pet2 = petYard.Pets.Values.SingleOrDefault(p => p.PetId == packet.PetId2);

            if (pet1 == null || pet2 == null || pet1.Rarity != pet2.Rarity ||
                pet1.Rarity == PRarity.Divine || pet1.Rarity == PRarity.Undefined)
            {
                return;
            }

            if (TryDeduct(packet.PaymentTransType, client.Player,
                          FuseCost[pet1.Rarity][(int)packet.PaymentTransType]))
            {
                client.SendPacket(new BuyResult
                {
                    Result       = 0,
                    ResultString = "{\"key\":\"server.buy_success\"}"
                });

                var result = pet1.Fuse(pet2);
                if (result < pet1.Ability.Length && result != 0)
                {
                    client.SendPacket(new NewAbilityMessage()
                    {
                        Type = pet1.Ability[result].Type
                    });
                }
                else
                {
                    // reload pet with new evolved skin
                    petYard.LeaveWorld(pet1);
                    var player = client.Player;
                    var dPet   = new DbPet(client.Account, pet1.PetId);
                    var pet    = new Pet(client.Manager, null, dPet);
                    if (pet1.PlayerOwner == player)
                    {
                        player.Pet      = pet;
                        pet.PlayerOwner = player;
                        pet.Move(player.X, player.Y);
                    }
                    else
                    {
                        var sp = petYard.GetPetSpawnPosition();
                        pet.Move(sp.X, sp.Y);
                    }
                    petYard.EnterWorld(pet);

                    client.SendPacket(new EvolvedPetMessage()
                    {
                        PetId       = pet1.PetId,
                        InitialSkin = pet1.SkinId,
                        FinalSkin   = result
                    });
                }

                // remove fused pet
                client.Manager.Database.RemovePet(client.Account, pet2.PetId);
                petYard.LeaveWorld(pet2);
                client.SendPacket(new DeletePetMessage()
                {
                    PetId = pet2.PetId
                });
            }
        }
Esempio n. 6
0
        public override void Init(World owner)
        {
            var x            = 0;
            var y            = 0;
            var spawnRegions = owner.GetSpawnPoints();

            if (spawnRegions.Any())
            {
                var rand    = new System.Random();
                var sRegion = spawnRegions.ElementAt(rand.Next(0, spawnRegions.Length));
                x = sRegion.Key.X;
                y = sRegion.Key.Y;
            }
            Move(x + 0.5f, y + 0.5f);
            tiles = new byte[owner.Map.Width, owner.Map.Height];

            // spawn pet if player has one attached
            var petId = _client.Character.PetId;

            if (petId > 0 && Manager.Config.serverSettings.enablePets)
            {
                var dbPet = new DbPet(Client.Account, petId);
                if (dbPet.ObjectType != 0)
                {
                    var pet = new Pet(Manager, this, dbPet);
                    pet.Move(X, Y);
                    owner.EnterWorld(pet);
                    Pet = pet;
                }
            }

            FameCounter    = new FameCounter(this);
            FameGoal       = GetFameGoal(FameCounter.ClassStats[ObjectType].BestFame);
            ExperienceGoal = GetExpGoal(_client.Character.Level);
            Stars          = GetStars();

            if (owner.Name.Equals("OceanTrench"))
            {
                OxygenBar = 100;
            }

            SetNewbiePeriod();

            if (owner.IsNotCombatMapArea)
            {
                Client.SendPacket(new GlobalNotification
                {
                    Text = Client.Account.Gifts.Length > 0 ? "giftChestOccupied" : "giftChestEmpty"
                });

                if (DeathArena.Instance?.CurrentState != DeathArena.ArenaState.NotStarted && DeathArena.Instance?.CurrentState != DeathArena.ArenaState.Ended)
                {
                    Client.SendPacket(new GlobalNotification
                    {
                        Type = GlobalNotification.ADD_ARENA,
                        Text = $"{{\"name\":\"Oryx Arena\",\"open\":{DeathArena.Instance?.CurrentState == DeathArena.ArenaState.CountDown}}}"
                    });
                }

                if (worlds.logic.Arena.Instance?.CurrentState != worlds.logic.Arena.ArenaState.NotStarted)
                {
                    Client.SendPacket(new GlobalNotification
                    {
                        Type = GlobalNotification.ADD_ARENA,
                        Text = $"{{\"name\":\"Public Arena\",\"open\":{worlds.logic.Arena.Instance?.CurrentState == worlds.logic.Arena.ArenaState.CountDown}}}"
                    });
                }
            }

            base.Init(owner);
        }