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(); } }
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); }
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) }); }
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 }); } }
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); }