static bool DeleteCharAccessories(uint charId) { try { SpellRecord.DeleteAll("OwnerId = " + charId); AuraRecord.DeleteAll("OwnerId = " + charId); ItemRecord.DeleteAll("OwnerId = " + charId); SkillRecord.DeleteAll("OwnerId = " + charId); SpecProfile.DeleteAll("CharacterId = " + charId); ReputationRecord.DeleteAll("OwnerId = " + charId); QuestRecord.DeleteAll("OwnerId = " + charId); SummonedPetRecord.DeleteAll("OwnerLowId = " + charId); PermanentPetRecord.DeleteAll("OwnerLowId = " + charId); MailMgr.ReturnValueMailFor(charId); MailMessage.DeleteAll("ReceiverId = " + charId); RelationMgr.Instance.RemoveRelations(charId); InstanceMgr.RemoveLog(charId); GroupMgr.Instance.RemoveOfflineCharacter(charId); AchievementRecord.DeleteAll("CharacterId = " + charId); AchievementProgressRecord.DeleteAll("CharacterId = " + charId); return(true); } catch (Exception ex) { LogUtil.ErrorException(ex, "Failed to delete character with Id: " + charId); return(false); } }
public static void SendFaceOrHairChangedResponse(IRealmClient client, bool isHair, bool success = false, Asda2Item usedItem = null) { using (RealmPacketOut packet = new RealmPacketOut(RealmServerOpCode.FaceOrHairChanged)) { packet.WriteByte(success ? 1 : 0); packet.WriteByte(isHair ? 1 : 2); packet.WriteByte(client.ActiveCharacter.HairStyle); packet.WriteByte(client.ActiveCharacter.HairColor); packet.WriteByte(client.ActiveCharacter.Record.Face); packet.WriteInt32(client.ActiveCharacter.Asda2Inventory.Weight); packet.WriteInt32(client.ActiveCharacter.Money); Asda2InventoryHandler.WriteItemInfoToPacket(packet, usedItem, false); client.Send(packet, true); if (!success) { return; } AchievementProgressRecord progressRecord = client.ActiveCharacter.Achievements.GetOrCreateProgressRecord(9U); switch (++progressRecord.Counter) { case 50: client.ActiveCharacter.DiscoverTitle(Asda2TitleId.Beautiful47); break; case 100: client.ActiveCharacter.GetTitle(Asda2TitleId.Beautiful47); break; } progressRecord.SaveAndFlush(); } }
public static void SendPetRemovedResponse(IRealmClient client, int petGuid) { AchievementProgressRecord progressRecord = client.ActiveCharacter.Achievements.GetOrCreateProgressRecord(168U); switch (++progressRecord.Counter) { case 5: client.ActiveCharacter.Map.CallDelayed(500, (Action)(() => client.ActiveCharacter.DiscoverTitle(Asda2TitleId.Abandoned363))); break; case 10: client.ActiveCharacter.Map.CallDelayed(500, (Action)(() => client.ActiveCharacter.GetTitle(Asda2TitleId.Abandoned363))); break; } progressRecord.SaveAndFlush(); using (RealmPacketOut packet = new RealmPacketOut(RealmServerOpCode.PetRemoved)) { packet.WriteInt32(client.ActiveCharacter.AccId); packet.WriteInt32(petGuid); packet.WriteByte(1); client.Send(packet, true); } }
public static void SendPetGoesSleepDueStarvationResponse(IRealmClient client, Asda2PetRecord pet) { if (client == null || client.ActiveCharacter == null || pet == null) { return; } AchievementProgressRecord progressRecord = client.ActiveCharacter.Achievements.GetOrCreateProgressRecord(167U); switch (++progressRecord.Counter) { case 5: client.ActiveCharacter.Map.CallDelayed(500, (Action)(() => client.ActiveCharacter.DiscoverTitle(Asda2TitleId.Neglected364))); break; case 10: client.ActiveCharacter.Map.CallDelayed(500, (Action)(() => client.ActiveCharacter.GetTitle(Asda2TitleId.Neglected364))); break; } progressRecord.SaveAndFlush(); using (RealmPacketOut packet = new RealmPacketOut(RealmServerOpCode.PetGoesSleepDueStarvation)) { packet.WriteInt32(client.ActiveCharacter.AccId); packet.WriteInt32(pet.Guid); client.Send(packet, true); } }
public static void UseSummonScrollRequest(IRealmClient client, RealmPacketIn packet) { packet.Position += 2; string name = packet.ReadAsdaString(20, Locale.Start); Character character = World.GetCharacter(name, false); if (character == null) { client.ActiveCharacter.SendSystemMessage(string.Format("{0} is not in game.", (object)name)); } else if (character.IsAsda2BattlegroundInProgress) { client.ActiveCharacter.SendSystemMessage(string.Format("{0} is on war.", (object)name)); } else if (client.ActiveCharacter.IsAsda2BattlegroundInProgress) { client.ActiveCharacter.SendSystemMessage("You cant teleport on war."); } else if (client.ActiveCharacter.Name == character.Name) { client.ActiveCharacter.SendSystemMessage("You cant teleport oneself."); } else { bool flag = client.ActiveCharacter.Asda2Inventory.UseTeleportScroll(true); AchievementProgressRecord progressRecord = client.ActiveCharacter.Achievements.GetOrCreateProgressRecord(90U); switch (++progressRecord.Counter) { case 50: client.ActiveCharacter.Map.CallDelayed(500, (Action)(() => client.ActiveCharacter.DiscoverTitle(Asda2TitleId.Lonely224))); break; case 100: client.ActiveCharacter.Map.CallDelayed(500, (Action)(() => client.ActiveCharacter.GetTitle(Asda2TitleId.Lonely224))); break; } progressRecord.SaveAndFlush(); if (flag) { Asda2CharacterHandler.SendSummonChar(client.ActiveCharacter, character); } else { client.ActiveCharacter.SendSystemMessage("You have not summon scroll"); } } }
// SMSG_CRITERIA_UPDATE public static void SendAchievmentStatus(AchievementProgressRecord achievementProgressRecord, Character chr) { using (var packet = new RealmPacketOut(RealmServerOpCode.SMSG_CRITERIA_UPDATE, 4 * 5 + 8 * 2)) { packet.WriteUInt((uint)achievementProgressRecord.AchievementCriteriaId); packet.WritePackedUInt64(achievementProgressRecord.Counter); // amount chr.EntityId.WritePacked(packet); packet.Write(0); packet.WriteDateTime(DateTime.Now); // start time? packet.Write(0); // Duration packet.Write(0); // Duration left chr.Client.Send(packet); } }
public static void SendAchievmentStatus(AchievementProgressRecord achievementProgressRecord, Character chr) { using (RealmPacketOut realmPacketOut = new RealmPacketOut((PacketId)RealmServerOpCode.SMSG_CRITERIA_UPDATE, 36)) { realmPacketOut.WriteUInt(achievementProgressRecord.AchievementCriteriaId); realmPacketOut.WritePackedUInt64((ulong)achievementProgressRecord.Counter); chr.EntityId.WritePacked((BinaryWriter)realmPacketOut); realmPacketOut.Write(0); realmPacketOut.WriteDateTime(DateTime.Now); realmPacketOut.Write(0); realmPacketOut.Write(0); chr.Client.Send(realmPacketOut, false); } }
// SMSG_CRITERIA_UPDATE public static void SendAchievmentStatus(AchievementProgressRecord achievementProgressRecord, Character chr) { using (var packet = new RealmPacketOut(RealmServerOpCode.SMSG_CRITERIA_UPDATE, 4*5+8*2)) { packet.WriteUInt((uint)achievementProgressRecord.AchievementCriteriaId); packet.WritePackedUInt64(achievementProgressRecord.Counter); // amount chr.EntityId.WritePacked(packet); packet.Write(0); packet.WriteDateTime(DateTime.Now); // start time? packet.Write(0); // Duration packet.Write(0); // Duration left chr.Client.Send(packet); } }
public static void SendDuelEndedResponse(Character winer, Character looser) { AchievementProgressRecord progressRecord = winer.Achievements.GetOrCreateProgressRecord(19U); switch (++progressRecord.Counter) { case 13: winer.DiscoverTitle(Asda2TitleId.Duelist122); break; case 25: winer.GetTitle(Asda2TitleId.Duelist122); break; case 50: winer.DiscoverTitle(Asda2TitleId.Brawler123); break; case 100: winer.GetTitle(Asda2TitleId.Brawler123); break; case 500: winer.DiscoverTitle(Asda2TitleId.Undefeated124); break; case 1000: winer.GetTitle(Asda2TitleId.Undefeated124); break; } progressRecord.SaveAndFlush(); using (RealmPacketOut packet = new RealmPacketOut(RealmServerOpCode.DuelEnded)) { packet.WriteByte(0); packet.WriteByte(0); packet.WriteInt16(winer.SessionId); packet.WriteInt32(winer.AccId); packet.WriteInt16(looser.SessionId); packet.WriteInt32(looser.AccId); packet.WriteByte(2); packet.WriteFixedAsciiString(winer.Name, 20, Locale.Start); packet.WriteFixedAsciiString(looser.Name, 20, Locale.Start); winer.SendPacketToArea(packet, true, true, Locale.Any, new float?()); looser.Send(packet, true); } }
public static void SendSomeOneKilledSomeOneResponse(Asda2Battleground btlgrnd, int killerAccId, int killerWarId, string killerName, string victimName) { Character characterByAccId = WCell.RealmServer.Global.World.GetCharacterByAccId((uint)killerAccId); AchievementProgressRecord progressRecord = characterByAccId.Achievements.GetOrCreateProgressRecord(21U); switch (++progressRecord.Counter) { case 13: characterByAccId.DiscoverTitle(Asda2TitleId.Soldier129); break; case 25: characterByAccId.GetTitle(Asda2TitleId.Soldier129); break; case 75: characterByAccId.DiscoverTitle(Asda2TitleId.Killer130); break; case 100: characterByAccId.GetTitle(Asda2TitleId.Killer130); break; case 500: characterByAccId.DiscoverTitle(Asda2TitleId.Assassin131); break; case 1000: characterByAccId.GetTitle(Asda2TitleId.Assassin131); break; } progressRecord.SaveAndFlush(); using (RealmPacketOut packet = new RealmPacketOut(RealmServerOpCode.SomeOneKilledSomeOne)) { packet.WriteInt32(killerAccId); packet.WriteInt32(killerWarId); packet.WriteInt32(1); packet.WriteFixedAsciiString(killerName, 20, Locale.Start); packet.WriteFixedAsciiString(victimName, 20, Locale.Start); btlgrnd.Send(packet, true, new short?(), Locale.Any); } }
public static void SendPetResurectedResponse(IRealmClient client, Asda2PetRecord pet, Asda2Item resurectPetItem) { AchievementProgressRecord progressRecord = client.ActiveCharacter.Achievements.GetOrCreateProgressRecord(169U); switch (++progressRecord.Counter) { case 5: client.ActiveCharacter.Map.CallDelayed(500, (Action)(() => client.ActiveCharacter.DiscoverTitle(Asda2TitleId.Veterinarian365))); break; case 10: client.ActiveCharacter.Map.CallDelayed(500, (Action)(() => client.ActiveCharacter.GetTitle(Asda2TitleId.Veterinarian365))); break; } progressRecord.SaveAndFlush(); using (RealmPacketOut packet = new RealmPacketOut(RealmServerOpCode.PetResurected)) { packet.WriteInt32(client.ActiveCharacter.AccId); packet.WriteInt32(pet.Guid); packet.WriteInt32(resurectPetItem.ItemId); packet.WriteByte(2); packet.WriteInt16(resurectPetItem.Slot); packet.WriteInt16(resurectPetItem.IsDeleted ? -1 : 0); packet.WriteInt32(resurectPetItem.Amount); packet.WriteByte(0); packet.WriteInt16(resurectPetItem.Amount); packet.WriteSkip(Asda2PetHandler.stab28); packet.WriteByte(1); packet.WriteByte(pet.HungerPrc); packet.WriteInt32(client.ActiveCharacter.Asda2Inventory.Weight); packet.WriteInt16((short)pet.Stat1Type); packet.WriteInt32(pet.Stat1Value); packet.WriteInt16((short)pet.Stat2Type); packet.WriteInt32(pet.Stat2Value); packet.WriteInt16((short)pet.Stat2Type); packet.WriteInt32(pet.Stat2Value); client.Send(packet, true); } }
public static void SendUpdatePetExpResponse(IRealmClient client, Asda2PetRecord pet, bool levelUped = false) { if (pet == null || client.ActiveCharacter == null) { return; } if (pet.Level == (byte)5) { client.ActiveCharacter.Map.CallDelayed(500, (Action)(() => client.ActiveCharacter.GetTitle(Asda2TitleId.Mature368))); } if ((int)pet.Level == (int)pet.MaxLevel) { AchievementProgressRecord progressRecord = client.ActiveCharacter.Achievements.GetOrCreateProgressRecord(171U); switch (++progressRecord.Counter) { case 5: client.ActiveCharacter.Map.CallDelayed(500, (Action)(() => client.ActiveCharacter.DiscoverTitle(Asda2TitleId.Trainer369))); break; case 10: client.ActiveCharacter.Map.CallDelayed(500, (Action)(() => client.ActiveCharacter.GetTitle(Asda2TitleId.Trainer369))); break; } progressRecord.SaveAndFlush(); } using (RealmPacketOut packet = new RealmPacketOut(RealmServerOpCode.UpdatePetExp)) { packet.WriteInt16(client.ActiveCharacter.SessionId); packet.WriteInt32(client.ActiveCharacter.AccId); packet.WriteInt32(pet.Guid); packet.WriteInt16(pet.Expirience); packet.WriteByte(levelUped ? 1 : 0); packet.WriteByte(pet.Level); packet.WriteByte(0); client.Send(packet, true); } }
public static void SendCharacterFullInfoResponse(IRealmClient client, Character target) { AchievementProgressRecord progressRecord = client.ActiveCharacter.Achievements.GetOrCreateProgressRecord(8U); switch (++progressRecord.Counter) { case 500: client.ActiveCharacter.Map.CallDelayed(500, () => client.ActiveCharacter.DiscoverTitle(Asda2TitleId.Curious46)); break; case 1000: client.ActiveCharacter.Map.CallDelayed(500, () => client.ActiveCharacter.GetTitle(Asda2TitleId.Curious46)); break; } progressRecord.SaveAndFlush(); using (RealmPacketOut packet = new RealmPacketOut(RealmServerOpCode.CharacterFullInfo)) { packet.WriteByte(target.Level); packet.WriteByte(target.ProfessionLevel); packet.WriteByte((byte)target.Archetype.ClassId); packet.WriteFixedAsciiString(target.Guild == null ? "" : target.Guild.Name, 17, Locale.Start); packet.WriteSkip(unk9); packet.WriteInt32(target.AccId); packet.WriteByte(3); for (int index = 0; index < 9; ++index) { Asda2Item asda2Item = target.Asda2Inventory.Equipment[index + 11]; Asda2InventoryHandler.WriteItemInfoToPacket(packet, asda2Item, false); } client.Send(packet, true); } }
public override bool IsAchieved(AchievementProgressRecord achievementProgressRecord) { return achievementProgressRecord.Counter >= ReputationAmount; }
public override bool IsAchieved(AchievementProgressRecord achievementProgressRecord) { return achievementProgressRecord.Counter >= NumberOfBankSlots; }
public virtual bool IsAchieved(AchievementProgressRecord achievementProgressRecord) { return false; }
public override bool IsAchieved(AchievementProgressRecord achievementProgressRecord) { return achievementProgressRecord.Counter >= (uint)SkillTierId; }
public override bool IsAchieved(AchievementProgressRecord achievementProgressRecord) { return achievementProgressRecord.Counter >= CompletedQuestCount; }
private static void ProcessFunctionalItem(IRealmClient client, uint parametr, short slot) { Asda2Item item = client.ActiveCharacter.Asda2Inventory.GetShopShopItem(slot); if (item == null) { FunctionalItemsHandler.SendUpdateShopItemInfoResponse(client, UseFunctionalItemError.FunctionalItemDoesNotExist, (Asda2Item)null); } else { UseFunctionalItemError status = UseFunctionalItemError.Ok; if ((int)item.RequiredLevel > client.ActiveCharacter.Level) { FunctionalItemsHandler.SendUpdateShopItemInfoResponse(client, UseFunctionalItemError.YorLevelIsNotHightEnoght, item); } else { ServerApp <WCell.RealmServer.RealmServer> .IOQueue.AddMessage((Action)(() => { try { switch (item.Category) { case Asda2ItemCategory.IncPAtk: client.ActiveCharacter.ApplyFunctionItemBuff(item.ItemId, false); FunctionalItemsHandler.SendShopItemUsedResponse(client, item.ItemId, (int)item.Template.AtackRange); break; case Asda2ItemCategory.IncMAtk: client.ActiveCharacter.ApplyFunctionItemBuff(item.ItemId, false); FunctionalItemsHandler.SendShopItemUsedResponse(client, item.ItemId, (int)item.Template.AtackRange); break; case Asda2ItemCategory.IncPDef: client.ActiveCharacter.ApplyFunctionItemBuff(item.ItemId, false); FunctionalItemsHandler.SendShopItemUsedResponse(client, item.ItemId, (int)item.Template.AtackRange); break; case Asda2ItemCategory.IncMdef: client.ActiveCharacter.ApplyFunctionItemBuff(item.ItemId, false); FunctionalItemsHandler.SendShopItemUsedResponse(client, item.ItemId, (int)item.Template.AtackRange); break; case Asda2ItemCategory.IncHp: client.ActiveCharacter.ApplyFunctionItemBuff(item.ItemId, false); FunctionalItemsHandler.SendShopItemUsedResponse(client, item.ItemId, (int)item.Template.AtackRange); break; case Asda2ItemCategory.IncMp: client.ActiveCharacter.ApplyFunctionItemBuff(item.ItemId, false); FunctionalItemsHandler.SendShopItemUsedResponse(client, item.ItemId, (int)item.Template.AtackRange); break; case Asda2ItemCategory.IncStr: client.ActiveCharacter.ApplyFunctionItemBuff(item.ItemId, false); FunctionalItemsHandler.SendShopItemUsedResponse(client, item.ItemId, (int)item.Template.AtackRange); break; case Asda2ItemCategory.IncSta: client.ActiveCharacter.ApplyFunctionItemBuff(item.ItemId, false); FunctionalItemsHandler.SendShopItemUsedResponse(client, item.ItemId, (int)item.Template.AtackRange); break; case Asda2ItemCategory.IncInt: client.ActiveCharacter.ApplyFunctionItemBuff(item.ItemId, false); FunctionalItemsHandler.SendShopItemUsedResponse(client, item.ItemId, (int)item.Template.AtackRange); break; case Asda2ItemCategory.IncSpi: client.ActiveCharacter.ApplyFunctionItemBuff(item.ItemId, false); FunctionalItemsHandler.SendShopItemUsedResponse(client, item.ItemId, (int)item.Template.AtackRange); break; case Asda2ItemCategory.IncDex: client.ActiveCharacter.ApplyFunctionItemBuff(item.ItemId, false); FunctionalItemsHandler.SendShopItemUsedResponse(client, item.ItemId, (int)item.Template.AtackRange); break; case Asda2ItemCategory.IncLuck: client.ActiveCharacter.ApplyFunctionItemBuff(item.ItemId, false); FunctionalItemsHandler.SendShopItemUsedResponse(client, item.ItemId, (int)item.Template.AtackRange); break; case Asda2ItemCategory.IncMoveSpeed: if (client.ActiveCharacter.LastTransportUsedTime + TimeSpan.FromMilliseconds(30000.0) > DateTime.Now) { status = UseFunctionalItemError.CoolingTimeRemain; break; } if (item.Record.IsSoulBound && item.Record.AuctionEndTime != DateTime.MinValue && DateTime.Now > item.Record.AuctionEndTime) { Asda2InventoryHandler.ItemRemovedFromInventoryResponse(client.ActiveCharacter, item, DeleteOrSellItemStatus.Ok, 0); item.Destroy(); client.ActiveCharacter.SendInfoMsg("Vehicle expired."); status = UseFunctionalItemError.TheDurationOfTheShopitemHaExprised; break; } if (item.Record.AuctionEndTime == DateTime.MinValue) { item.Record.AuctionEndTime = DateTime.Now + TimeSpan.FromDays((double)item.AttackTime); } client.ActiveCharacter.LastTransportUsedTime = DateTime.Now; item.IsSoulbound = true; client.ActiveCharacter.TransportItemId = item.ItemId; AchievementProgressRecord progressRecord1 = client.ActiveCharacter.Achievements.GetOrCreateProgressRecord(85U); switch (++progressRecord1.Counter) { case 1: client.ActiveCharacter.Map.CallDelayed(500, (Action)(() => client.ActiveCharacter.DiscoverTitle(Asda2TitleId.Rapid219))); break; case 1000: client.ActiveCharacter.Map.CallDelayed(500, (Action)(() => client.ActiveCharacter.GetTitle(Asda2TitleId.Rapid219))); break; } progressRecord1.SaveAndFlush(); break; case Asda2ItemCategory.IncExp: client.ActiveCharacter.ApplyFunctionItemBuff(item.ItemId, false); FunctionalItemsHandler.SendShopItemUsedResponse(client, item.ItemId, (int)item.Template.AtackRange); break; case Asda2ItemCategory.IncDropChance: client.ActiveCharacter.ApplyFunctionItemBuff(item.ItemId, false); FunctionalItemsHandler.SendShopItemUsedResponse(client, item.ItemId, (int)item.Template.AtackRange); break; case Asda2ItemCategory.IncDigChance: client.ActiveCharacter.ApplyFunctionItemBuff(item.ItemId, false); FunctionalItemsHandler.SendShopItemUsedResponse(client, item.ItemId, (int)item.Template.AtackRange); break; case Asda2ItemCategory.IncExpStackable: client.ActiveCharacter.ApplyFunctionItemBuff(item.ItemId, false); FunctionalItemsHandler.SendShopItemUsedResponse(client, item.ItemId, (int)item.Template.AtackRange); break; case Asda2ItemCategory.IncAtackSpeed: client.ActiveCharacter.ApplyFunctionItemBuff(item.ItemId, false); FunctionalItemsHandler.SendShopItemUsedResponse(client, item.ItemId, (int)item.Template.AtackRange); break; case Asda2ItemCategory.ExpandWarehouse: if (client.ActiveCharacter.Record.PremiumWarehouseBagsCount >= (byte)8) { status = UseFunctionalItemError.WarehouseHasReachedMaxCapacity; break; } ++client.ActiveCharacter.Record.PremiumWarehouseBagsCount; FunctionalItemsHandler.SendWarehouseSlotsExpandedResponse(client, false); break; case Asda2ItemCategory.ResetAllSkill: FunctionalItemsHandler.ResetSkills(client.ActiveCharacter); Asda2CharacterHandler.SendLearnedSkillsInfo(client.ActiveCharacter); AchievementProgressRecord progressRecord2 = client.ActiveCharacter.Achievements.GetOrCreateProgressRecord(84U); switch (++progressRecord2.Counter) { case 3: client.ActiveCharacter.Map.CallDelayed(500, (Action)(() => client.ActiveCharacter.DiscoverTitle(Asda2TitleId .Perfectionist218))); break; case 5: client.ActiveCharacter.Map.CallDelayed(500, (Action)(() => client.ActiveCharacter.GetTitle(Asda2TitleId.Perfectionist218))); break; } progressRecord2.SaveAndFlush(); break; case Asda2ItemCategory.ResetOneSkill: Spell spell1 = client.ActiveCharacter.Spells.First <Spell>( (Func <Spell, bool>)(s => (long)s.RealId == (long)parametr)); if (spell1 != null) { int num1 = 0 + spell1.Cost; for (int index = spell1.Level - 1; index > 0; --index) { Spell spell2 = SpellHandler.Get((uint)spell1.RealId + (uint)(index * 1000)); if (spell2 != null) { num1 += spell2.Cost; } } uint num2 = (uint)(num1 / 2); client.ActiveCharacter.Spells.Remove(spell1); client.ActiveCharacter.AddMoney(num2); Asda2CharacterHandler.SendPreResurectResponse(client.ActiveCharacter); FunctionalItemsHandler.SendSkillResetedResponse(client, spell1.RealId, (short)spell1.Level, num2); Asda2CharacterHandler.SendUpdateStatsOneResponse(client); Asda2CharacterHandler.SendUpdateStatsResponse(client); client.ActiveCharacter.SendMoneyUpdate(); AchievementProgressRecord progressRecord3 = client.ActiveCharacter.Achievements.GetOrCreateProgressRecord(84U); switch (++progressRecord3.Counter) { case 3: client.ActiveCharacter.Map.CallDelayed(500, (Action)(() => client.ActiveCharacter.DiscoverTitle(Asda2TitleId .Perfectionist218))); break; case 5: client.ActiveCharacter.Map.CallDelayed(500, (Action)(() => client.ActiveCharacter.GetTitle(Asda2TitleId .Perfectionist218))); break; } progressRecord3.SaveAndFlush(); break; } status = UseFunctionalItemError.FailedToUse; client.ActiveCharacter.SendInfoMsg("Skill is not learned. Restart client."); break; case Asda2ItemCategory.TeleportToCharacter: if (parametr >= 10U || client.ActiveCharacter.TeleportPoints[parametr] == null) { status = UseFunctionalItemError.FailedToUse; break; } Asda2TeleportingPointRecord teleportPoint = client.ActiveCharacter.TeleportPoints[parametr]; client.ActiveCharacter.TeleportTo(teleportPoint.MapId, new Vector3((float)teleportPoint.X, (float)teleportPoint.Y)); AchievementProgressRecord progressRecord4 = client.ActiveCharacter.Achievements.GetOrCreateProgressRecord(89U); switch (++progressRecord4.Counter) { case 50: client.ActiveCharacter.Map.CallDelayed(500, (Action)(() => client.ActiveCharacter.DiscoverTitle(Asda2TitleId.Traveler223))); break; case 100: client.ActiveCharacter.Map.CallDelayed(500, (Action)(() => client.ActiveCharacter.GetTitle(Asda2TitleId.Traveler223))); break; } progressRecord4.SaveAndFlush(); break; case Asda2ItemCategory.InstantRecover100PrcHP: if (client.ActiveCharacter.Last100PrcRecoveryUsed + 30000U > (uint)Environment.TickCount) { status = UseFunctionalItemError.CoolingTimeRemain; break; } client.ActiveCharacter.Last100PrcRecoveryUsed = (uint)Environment.TickCount; client.ActiveCharacter.HealPercent(100, (Unit)null, (SpellEffect)null); break; case Asda2ItemCategory.InstantRecover100PrcHPandMP: if (client.ActiveCharacter.Last100PrcRecoveryUsed + 30000U < (uint)Environment.TickCount) { status = UseFunctionalItemError.CoolingTimeRemain; } client.ActiveCharacter.HealPercent(100, (Unit)null, (SpellEffect)null); client.ActiveCharacter.Power = client.ActiveCharacter.MaxPower; client.ActiveCharacter.Last100PrcRecoveryUsed = (uint)Environment.TickCount; break; case Asda2ItemCategory.RecoverHp10TimesByPrcOver30Sec: PereodicAction pereodicAction = (PereodicAction)null; if (client.ActiveCharacter.PereodicActions.ContainsKey(Asda2PereodicActionType .HpRegenPrc)) { pereodicAction = client.ActiveCharacter.PereodicActions[Asda2PereodicActionType.HpRegenPrc]; } if (pereodicAction != null && pereodicAction.CallsNum >= 10 && pereodicAction.Value >= item.Template.ValueOnUse) { status = UseFunctionalItemError.CoolingTimeRemain; break; } if (client.ActiveCharacter.PereodicActions.ContainsKey(Asda2PereodicActionType .HpRegenPrc)) { client.ActiveCharacter.PereodicActions.Remove( Asda2PereodicActionType.HpRegenPrc); } client.ActiveCharacter.PereodicActions.Add(Asda2PereodicActionType.HpRegenPrc, new PereodicAction(client.ActiveCharacter, item.Template.ValueOnUse, 10, 3000, Asda2PereodicActionType.HpRegenPrc)); break; case Asda2ItemCategory.ShopBanner: if (client.ActiveCharacter.Level < 10) { status = UseFunctionalItemError.YorLevelIsNotHightEnoght; break; } FunctionalItemsHandler.SendPremiumLongBuffInfoResponse(client, (byte)client.ActiveCharacter.ApplyFunctionItemBuff(item.ItemId, true), item.ItemId, (short)item.Template.PackageId); break; case Asda2ItemCategory.OpenWarehouse: break; case Asda2ItemCategory.PremiumPotions: FunctionalItemsHandler.SendPremiumLongBuffInfoResponse(client, (byte)client.ActiveCharacter.ApplyFunctionItemBuff(item.ItemId, true), item.ItemId, (short)item.Template.PackageId); client.ActiveCharacter.Asda2WingsItemId = (short)item.ItemId; AchievementProgressRecord progressRecord5 = client.ActiveCharacter.Achievements.GetOrCreateProgressRecord(86U); switch (++progressRecord5.Counter) { case 50: client.ActiveCharacter.Map.CallDelayed(500, (Action)(() => client.ActiveCharacter.DiscoverTitle(Asda2TitleId.Winged220))); break; case 100: client.ActiveCharacter.Map.CallDelayed(500, (Action)(() => client.ActiveCharacter.GetTitle(Asda2TitleId.Winged220))); break; } progressRecord5.SaveAndFlush(); break; case Asda2ItemCategory.ExpandInventory: FunctionalItemsHandler.SendPremiumLongBuffInfoResponse(client, (byte)client.ActiveCharacter.ApplyFunctionItemBuff(item.ItemId, true), item.ItemId, (short)item.Template.PackageId); AchievementProgressRecord progressRecord6 = client.ActiveCharacter.Achievements.GetOrCreateProgressRecord(87U); switch (++progressRecord6.Counter) { case 3: client.ActiveCharacter.Map.CallDelayed(500, (Action)(() => client.ActiveCharacter.DiscoverTitle(Asda2TitleId.Packrat221))); break; case 5: client.ActiveCharacter.Map.CallDelayed(500, (Action)(() => client.ActiveCharacter.GetTitle(Asda2TitleId.Packrat221))); break; } progressRecord6.SaveAndFlush(); break; case Asda2ItemCategory.PetNotEatingByDays: FunctionalItemsHandler.SendPremiumLongBuffInfoResponse(client, (byte)client.ActiveCharacter.ApplyFunctionItemBuff(item.ItemId, true), item.ItemId, (short)item.Template.PackageId); client.ActiveCharacter.Map.CallDelayed(500, (Action)(() => client.ActiveCharacter.GetTitle(Asda2TitleId.Treat366))); break; case Asda2ItemCategory.RemoveDeathPenaltiesByDays: FunctionalItemsHandler.SendPremiumLongBuffInfoResponse(client, (byte)client.ActiveCharacter.ApplyFunctionItemBuff(item.ItemId, true), item.ItemId, (short)item.Template.PackageId); break; default: status = UseFunctionalItemError.NotAunctionalItem; break; } } catch (AlreadyBuffedExcepton ex) { status = UseFunctionalItemError.AlreadyFeelingTheEffectOfSimilarSkillType; } if (status == UseFunctionalItemError.Ok && item.Category != Asda2ItemCategory.IncMoveSpeed) { item.ModAmount(-1); } FunctionalItemsHandler.SendUpdateShopItemInfoResponse(client, status, item); })); } } }
// 108 public override bool IsAchieved(AchievementProgressRecord achievementProgressRecord) { return achievementProgressRecord.Counter >= 1; }
/// <summary> /// Adds a new progress record to the list. /// </summary> /// <param name="achievementProgressRecord"></param> private void AddProgressRecord(AchievementProgressRecord achievementProgressRecord) { m_progressRecords.Add(achievementProgressRecord.AchievementCriteriaId, achievementProgressRecord); }
public static void ProcessDig(IRealmClient client) { if (client.ActiveCharacter == null) { return; } Asda2Item mainWeapon = client.ActiveCharacter.MainWeapon as Asda2Item; if (mainWeapon == null) { return; } Asda2Item asda2Item = client.ActiveCharacter.Asda2Inventory.Equipment[10]; bool flag = asda2Item != null && asda2Item.Category == Asda2ItemCategory.DigOil; if (flag) { --asda2Item.Amount; } if (flag) { AchievementProgressRecord progressRecord1 = client.ActiveCharacter.Achievements.GetOrCreateProgressRecord(92U); AchievementProgressRecord progressRecord2 = client.ActiveCharacter.Achievements.GetOrCreateProgressRecord(91U); ++progressRecord1.Counter; if (progressRecord1.Counter >= 1000U || progressRecord2.Counter >= 1000U) { client.ActiveCharacter.GetTitle(Asda2TitleId.Automatic225); } progressRecord1.SaveAndFlush(); } if (Utility.Random(0, 100000) > CharacterFormulas.CalculateDiggingChance(mainWeapon.Template.ValueOnUse, client.ActiveCharacter.SoulmateRecord == null ? (byte)0 : client.ActiveCharacter.SoulmateRecord.FriendShipPoints, client.ActiveCharacter.Asda2Luck) && (flag ? (client.ActiveCharacter.MapId < (MapId)PremiumMapDiggingTemplates.Count ? 1 : 0) : (client.ActiveCharacter.MapId < (MapId)MapDiggingTemplates.Count ? 1 : 0)) != 0) { Asda2DiggingHandler.SendDigEndedResponse(client, true, asda2Item); MineTableRecord mineTableRecord = flag ? PremiumMapDiggingTemplates[(byte)client.ActiveCharacter.MapId] : MapDiggingTemplates[(byte)client.ActiveCharacter.MapId]; int randomItem = mineTableRecord.GetRandomItem(); Asda2NPCLoot asda2NpcLoot = new Asda2NPCLoot(); Asda2ItemTemplate templ = Asda2ItemMgr.GetTemplate(randomItem) ?? Asda2ItemMgr.GetTemplate(20622); asda2NpcLoot.Items = new Asda2LootItem[1] { new Asda2LootItem(templ, 1, 0U) { Loot = asda2NpcLoot } }; asda2NpcLoot.Lootable = client.ActiveCharacter; asda2NpcLoot.Looters.Add(new Asda2LooterEntry(client.ActiveCharacter)); asda2NpcLoot.MonstrId = 22222; if ((int)templ.ItemId >= 33542 && 33601 <= (int)templ.ItemId) { AchievementProgressRecord progressRecord = client.ActiveCharacter.Achievements.GetOrCreateProgressRecord(125U); switch (++progressRecord.Counter) { case 250: client.ActiveCharacter.DiscoverTitle(Asda2TitleId.Astrological292); break; case 500: client.ActiveCharacter.GetTitle(Asda2TitleId.Astrological292); break; } progressRecord.SaveAndFlush(); } if (templ.ItemId == Asda2ItemId.TreasureBox31407 || templ.ItemId == Asda2ItemId.GoldenTreasureBox31408) { AchievementProgressRecord progressRecord1 = client.ActiveCharacter.Achievements.GetOrCreateProgressRecord(126U); switch (++progressRecord1.Counter) { case 25: client.ActiveCharacter.DiscoverTitle(Asda2TitleId.Treasure293); break; case 50: client.ActiveCharacter.GetTitle(Asda2TitleId.Treasure293); break; } progressRecord1.SaveAndFlush(); if (templ.ItemId == Asda2ItemId.GoldenTreasureBox31408) { AchievementProgressRecord progressRecord2 = client.ActiveCharacter.Achievements.GetOrCreateProgressRecord((uint)sbyte.MaxValue); switch (++progressRecord2.Counter) { case 389: client.ActiveCharacter.DiscoverTitle(Asda2TitleId.Lucky295); break; case 777: client.ActiveCharacter.GetTitle(Asda2TitleId.Lucky295); break; } progressRecord2.SaveAndFlush(); } } client.ActiveCharacter.Map.SpawnLoot(asda2NpcLoot); client.ActiveCharacter.GainXp( CharacterFormulas.CalcDiggingExp(client.ActiveCharacter.Level, mineTableRecord.MinLevel), "digging", false); client.ActiveCharacter.GuildPoints += CharacterFormulas.DiggingGuildPoints; } else { Asda2DiggingHandler.SendDigEndedResponse(client, false, asda2Item); } client.ActiveCharacter.IsDigging = false; --client.ActiveCharacter.Stunned; }
public static void SendCraftedResponse(IRealmClient client, bool sucess, byte craftTimes, Asda2Item craftedItem, List <Asda2Item> craftMaterials) { if (craftedItem != null) { AchievementProgressRecord progressRecord1 = client.ActiveCharacter.Achievements.GetOrCreateProgressRecord(108U); switch (++progressRecord1.Counter) { case 500: client.ActiveCharacter.DiscoverTitle(Asda2TitleId.Crafty267); break; case 1000: client.ActiveCharacter.GetTitle(Asda2TitleId.Crafty267); break; } progressRecord1.SaveAndFlush(); if (craftedItem.Template.Quality == Asda2ItemQuality.Purple) { AchievementProgressRecord progressRecord2 = client.ActiveCharacter.Achievements.GetOrCreateProgressRecord(111U); switch (++progressRecord2.Counter) { case 5: client.ActiveCharacter.DiscoverTitle(Asda2TitleId.Rare270); break; case 10: client.ActiveCharacter.GetTitle(Asda2TitleId.Rare270); break; } progressRecord2.SaveAndFlush(); } if (craftedItem.Template.Quality == Asda2ItemQuality.Green) { AchievementProgressRecord progressRecord2 = client.ActiveCharacter.Achievements.GetOrCreateProgressRecord(112U); switch (++progressRecord2.Counter) { case 1: client.ActiveCharacter.DiscoverTitle(Asda2TitleId.Hero271); break; case 3: client.ActiveCharacter.GetTitle(Asda2TitleId.Hero271); break; } progressRecord2.SaveAndFlush(); } if (craftedItem.IsWeapon) { AchievementProgressRecord progressRecord2 = client.ActiveCharacter.Achievements.GetOrCreateProgressRecord(113U); switch (++progressRecord2.Counter) { case 25: client.ActiveCharacter.DiscoverTitle(Asda2TitleId.Weapon272); break; case 50: client.ActiveCharacter.GetTitle(Asda2TitleId.Weapon272); break; } progressRecord2.SaveAndFlush(); } if (craftedItem.IsArmor) { AchievementProgressRecord progressRecord2 = client.ActiveCharacter.Achievements.GetOrCreateProgressRecord(114U); switch (++progressRecord2.Counter) { case 25: client.ActiveCharacter.DiscoverTitle(Asda2TitleId.Armor273); break; case 50: client.ActiveCharacter.GetTitle(Asda2TitleId.Armor273); break; } progressRecord2.SaveAndFlush(); } if (craftedItem.Template.EquipmentSlot == Asda2EquipmentSlots.LeftRing || craftedItem.Template.EquipmentSlot == Asda2EquipmentSlots.RightRing || craftedItem.Template.EquipmentSlot == Asda2EquipmentSlots.Nackles) { AchievementProgressRecord progressRecord2 = client.ActiveCharacter.Achievements.GetOrCreateProgressRecord(115U); switch (++progressRecord2.Counter) { case 25: client.ActiveCharacter.DiscoverTitle(Asda2TitleId.Jewel274); break; case 50: client.ActiveCharacter.GetTitle(Asda2TitleId.Jewel274); break; } progressRecord2.SaveAndFlush(); } } using (RealmPacketOut packet = new RealmPacketOut(RealmServerOpCode.Crafted)) { packet.WriteByte(sucess ? 1 : 0); packet.WriteInt16(client.ActiveCharacter.Asda2Inventory.Weight); packet.WriteByte(client.ActiveCharacter.Record.CraftingLevel); packet.WriteInt32(0); packet.WriteInt16((short)client.ActiveCharacter.Record.CraftingExp); packet.WriteInt16(craftTimes); Asda2InventoryHandler.WriteItemInfoToPacket(packet, craftedItem, false); for (int index = 0; index < 7; ++index) { Asda2Item asda2Item = craftMaterials.Count <= index ? (Asda2Item)null : craftMaterials[index]; Asda2InventoryHandler.WriteItemInfoToPacket(packet, asda2Item, false); } client.Send(packet, false); } }
public SkillLearnStatus TryLearnSpell(short skillId, byte level) { Spell spell = SpellHandler.Get((uint)skillId + (uint)level * 1000U); if (spell == null || level <= (byte)0) { return(SkillLearnStatus.Fail); } if ((int)spell.LearnLevel > this.OwnerChar.Level) { return(SkillLearnStatus.LowLevel); } if (spell.ClassMask != Asda2ClassMask.All && !spell.ClassMask.HasFlag((Enum)this.OwnerChar.Asda2ClassMask) || (int)spell.ProffNum > (int)this.OwnerChar.RealProffLevel) { return(SkillLearnStatus.JoblevelIsNotHighEnought); } if (this.AvalibleSkillPoints <= 0) { return(SkillLearnStatus.NotEnoghtSpellPoints); } if (!this.OwnerChar.SubtractMoney((uint)spell.Cost)) { return(SkillLearnStatus.NotEnoghtMoney); } AchievementProgressRecord progressRecord = this.OwnerChar.Achievements.GetOrCreateProgressRecord(1U); ++progressRecord.Counter; if (progressRecord.Counter == 45U) { switch (this.OwnerChar.Profession) { case Asda2Profession.Warrior: this.OwnerChar.DiscoverTitle(Asda2TitleId.ofBattle24); break; case Asda2Profession.Archer: this.OwnerChar.DiscoverTitle(Asda2TitleId.ofArchery25); break; case Asda2Profession.Mage: this.OwnerChar.DiscoverTitle(Asda2TitleId.ofMagic26); break; } } if (progressRecord.Counter > 90U) { switch (this.OwnerChar.Profession) { case Asda2Profession.Warrior: this.OwnerChar.GetTitle(Asda2TitleId.ofBattle24); break; case Asda2Profession.Archer: this.OwnerChar.GetTitle(Asda2TitleId.ofArchery25); break; case Asda2Profession.Mage: this.OwnerChar.GetTitle(Asda2TitleId.ofMagic26); break; } } progressRecord.SaveAndFlush(); if (level > (byte)1) { Spell oldSpell = this.FirstOrDefault <Spell>((Func <Spell, bool>)(s => (int)s.RealId == (int)skillId)); if (oldSpell == null || oldSpell.Level != spell.Level - 1) { return(SkillLearnStatus.BadSpellLevel); } this.Replace(oldSpell, spell); return(SkillLearnStatus.Ok); } this.AddSpell(spell, true); this.OwnerChar.SendMoneyUpdate(); return(SkillLearnStatus.Ok); }
public static void SendDigEndedResponse(IRealmClient client, bool success, Asda2Item item = null) { if (client == null || client.ActiveCharacter == null) { return; } AchievementProgressRecord progressRecord1 = client.ActiveCharacter.Achievements.GetOrCreateProgressRecord(116U); switch (++progressRecord1.Counter) { case 50: client.ActiveCharacter.DiscoverTitle(Asda2TitleId.Shovel285); break; case 100: client.ActiveCharacter.GetTitle(Asda2TitleId.Shovel285); break; case 2500: client.ActiveCharacter.DiscoverTitle(Asda2TitleId.Excavator286); break; case 5000: client.ActiveCharacter.GetTitle(Asda2TitleId.Excavator286); break; } progressRecord1.SaveAndFlush(); Map nonInstancedMap1 = World.GetNonInstancedMap(MapId.Alpia); Map nonInstancedMap2 = World.GetNonInstancedMap(MapId.Silaris); Map nonInstancedMap3 = World.GetNonInstancedMap(MapId.SunnyCoast); Map nonInstancedMap4 = World.GetNonInstancedMap(MapId.Flabis); Vector3 point1 = new Vector3(131f + nonInstancedMap1.Offset, 265f + nonInstancedMap1.Offset, 0.0f); Vector3 point2 = new Vector3(110f + nonInstancedMap2.Offset, 144f + nonInstancedMap2.Offset, 0.0f); Vector3 point3 = new Vector3(226f + nonInstancedMap3.Offset, 353f + nonInstancedMap3.Offset, 0.0f); Vector3 point4 = new Vector3(270f + nonInstancedMap4.Offset, 263f + nonInstancedMap4.Offset, 0.0f); if (client.ActiveCharacter.Position.GetDistance(point1) < 10.0) { AchievementProgressRecord progressRecord2 = client.ActiveCharacter.Achievements.GetOrCreateProgressRecord(117U); switch (++progressRecord2.Counter) { case 500: client.ActiveCharacter.DiscoverTitle(Asda2TitleId.Burial287); break; case 1000: client.ActiveCharacter.GetTitle(Asda2TitleId.Burial287); break; } progressRecord2.SaveAndFlush(); } if (client.ActiveCharacter.Position.GetDistance(point2) < 50.0) { AchievementProgressRecord progressRecord2 = client.ActiveCharacter.Achievements.GetOrCreateProgressRecord(118U); switch (++progressRecord2.Counter) { case 500: client.ActiveCharacter.DiscoverTitle(Asda2TitleId.Archaeologist288); break; case 1000: client.ActiveCharacter.GetTitle(Asda2TitleId.Archaeologist288); break; } progressRecord2.SaveAndFlush(); } if (client.ActiveCharacter.Position.GetDistance(point3) < 25.0) { AchievementProgressRecord progressRecord2 = client.ActiveCharacter.Achievements.GetOrCreateProgressRecord(119U); switch (++progressRecord2.Counter) { case 500: client.ActiveCharacter.DiscoverTitle(Asda2TitleId.Shipwreck289); break; case 1000: client.ActiveCharacter.GetTitle(Asda2TitleId.Shipwreck289); break; } progressRecord2.SaveAndFlush(); } if (client.ActiveCharacter.Position.GetDistance(point4) < 50.0) { AchievementProgressRecord progressRecord2 = client.ActiveCharacter.Achievements.GetOrCreateProgressRecord(120U); switch (++progressRecord2.Counter) { case 500: client.ActiveCharacter.DiscoverTitle(Asda2TitleId.Oasis290); break; case 1000: client.ActiveCharacter.GetTitle(Asda2TitleId.Oasis290); break; } progressRecord2.SaveAndFlush(); } AchievementProgressRecord progressRecord3 = client.ActiveCharacter.Achievements.GetOrCreateProgressRecord(121U); AchievementProgressRecord progressRecord4 = client.ActiveCharacter.Achievements.GetOrCreateProgressRecord(122U); AchievementProgressRecord progressRecord5 = client.ActiveCharacter.Achievements.GetOrCreateProgressRecord(123U); AchievementProgressRecord progressRecord6 = client.ActiveCharacter.Achievements.GetOrCreateProgressRecord(124U); switch (client.ActiveCharacter.MapId) { case MapId.Silaris: ++progressRecord4.Counter; progressRecord4.SaveAndFlush(); break; case MapId.Alpia: ++progressRecord3.Counter; progressRecord3.SaveAndFlush(); break; case MapId.Aquaton: ++progressRecord6.Counter; progressRecord6.SaveAndFlush(); break; case MapId.Flamio: ++progressRecord5.Counter; progressRecord5.SaveAndFlush(); break; } if (progressRecord3.Counter >= 1000U && progressRecord4.Counter >= 1000U && (progressRecord5.Counter >= 1000U && progressRecord6.Counter >= 1000U)) { client.ActiveCharacter.GetTitle(Asda2TitleId.Explorer291); } if (client.ActiveCharacter.isTitleGetted(Asda2TitleId.Shovel285) && client.ActiveCharacter.isTitleGetted(Asda2TitleId.Excavator286) && (client.ActiveCharacter.isTitleGetted(Asda2TitleId.Burial287) && client.ActiveCharacter.isTitleGetted(Asda2TitleId.Archaeologist288)) && (client.ActiveCharacter.isTitleGetted(Asda2TitleId.Shipwreck289) && client.ActiveCharacter.isTitleGetted(Asda2TitleId.Oasis290) && (client.ActiveCharacter.isTitleGetted(Asda2TitleId.Explorer291) && client.ActiveCharacter.isTitleGetted(Asda2TitleId.Astrological292))) && client.ActiveCharacter.isTitleGetted(Asda2TitleId.Treasure293)) { client.ActiveCharacter.GetTitle(Asda2TitleId.Geologist294); } using (RealmPacketOut packet = new RealmPacketOut(RealmServerOpCode.DigEnded)) { packet.WriteByte(success ? 1 : 0); packet.WriteInt16(client.ActiveCharacter.SessionId); Asda2InventoryHandler.WriteItemInfoToPacket(packet, item, false); client.ActiveCharacter.SendPacketToArea(packet, true, true, Locale.Any, new float?()); } }
private static void ProcessUseSkill(IRealmClient client, byte targetType, short skillId, ushort targetId) { Unit target = null; switch (targetType) { case 0: target = client.ActiveCharacter.Map.GetNpcByUniqMapId(targetId); break; case 1: target = World.GetCharacterBySessionId(targetId); break; default: client.ActiveCharacter.SendSystemMessage(string.Format( "Unknown skill target type {0}. SkillId {1}. Please report to developers.", targetType, skillId)); break; } if (target == null) { SendUseSkillResultResponse(client.ActiveCharacter, skillId, Asda2UseSkillResult.ChooseATarget); } else { if (targetType == 1) { Character characterBySessionId = World.GetCharacterBySessionId(targetId); if (characterBySessionId.Asda2FactionId == client.ActiveCharacter.Asda2FactionId && client.ActiveCharacter.IsAsda2BattlegroundInProgress && characterBySessionId.IsAsda2BattlegroundInProgress) { SendUseSkillResultResponse(client.ActiveCharacter, skillId, Asda2UseSkillResult.YouCannotUseSkillToTargetYet); return; } if (characterBySessionId == null) { SendUseSkillResultResponse(client.ActiveCharacter, skillId, Asda2UseSkillResult.ChooseATarget); return; } } Spell spellByRealId = client.ActiveCharacter.Spells.GetSpellByRealId(skillId); if (spellByRealId == null) { return; } switch (client.ActiveCharacter.SpellCast.Start(spellByRealId, target)) { case SpellFailedReason.OutOfRange: Asda2MovmentHandler.MoveToSelectedTargetAndAttack(client.ActiveCharacter); break; case SpellFailedReason.Ok: if (spellByRealId.LearnLevel >= 10) { if (spellByRealId.LearnLevel < 30) { if (client.ActiveCharacter.GreenCharges < 10) { ++client.ActiveCharacter.GreenCharges; } } else if (spellByRealId.LearnLevel < 50) { if (client.ActiveCharacter.BlueCharges < 10) { ++client.ActiveCharacter.BlueCharges; } if (client.ActiveCharacter.GreenCharges < 10) { ++client.ActiveCharacter.GreenCharges; } } else { if (client.ActiveCharacter.RedCharges < 10) { ++client.ActiveCharacter.RedCharges; } if (client.ActiveCharacter.BlueCharges < 10) { ++client.ActiveCharacter.BlueCharges; } if (client.ActiveCharacter.GreenCharges < 10) { ++client.ActiveCharacter.GreenCharges; } } } AchievementProgressRecord progressRecord = client.ActiveCharacter.Achievements.GetOrCreateProgressRecord(6U); switch (++progressRecord.Counter) { case 50: client.ActiveCharacter.DiscoverTitle(Asda2TitleId.Skilled44); break; case 100: client.ActiveCharacter.GetTitle(Asda2TitleId.Skilled44); break; } progressRecord.SaveAndFlush(); SendSetSkiillPowersStatsResponse(client.ActiveCharacter, true, skillId); break; } } }
public override bool IsAchieved(AchievementProgressRecord achievementProgressRecord) { return achievementProgressRecord.Counter >= NumberOfExaltedReputations; }
public override bool IsAchieved(AchievementProgressRecord achievementProgressRecord) { return achievementProgressRecord.Counter >= NumberOfVisitsAtBarberShop; }
/// <summary> /// Removes criteria progress from the player. /// </summary> /// <param name="achievementProgressRecord"></param> public void RemoveProgress(AchievementProgressRecord achievementProgressRecord) { m_progressRecords.Remove(achievementProgressRecord.AchievementCriteriaId); }
private void ProcessEndWar(Character character) { ++character.Stunned; GlobalHandler.SendFightingModeChangedResponse(character.Client, character.SessionId, (int)character.AccId, (short)-1); if (this.MvpCharacter != null) { ServerApp <WCell.RealmServer.RealmServer> .IOQueue.AddMessage((Action)(() => new BattlegroundCharacterResultRecord(this.CurrentWarResultRecordGuid, character.Name, character.EntityId.Low, (int)character.BattlegroundActPoints, character.BattlegroundKills, character.BattlegroundDeathes).CreateLater())); } int honorPoints = this.WiningFactionId == 2 ? 0 : CharacterFormulas.CalcHonorPoints(character.Level, character.BattlegroundActPoints, this.LightScores > this.DarkScores, character.BattlegroundDeathes, character.BattlegroundKills, this.MvpCharacter == character, this.Town); short honorCoins = this.WiningFactionId == 2 ? (short)0 : (short)((double)honorPoints / (double)CharacterFormulas.HonorCoinsDivider); if (character.BattlegroundActPoints < (short)5) { character.BattlegroundActPoints = (short)5; } if (honorPoints <= 0) { honorPoints = 1; } if (honorCoins <= (short)0) { honorCoins = (short)1; } Asda2Item asda2Item = (Asda2Item)null; if (honorCoins > (short)0) { int num = (int)character.Asda2Inventory.TryAdd(20614, (int)honorCoins, true, ref asda2Item, new Asda2InventoryType?(), (Asda2Item)null); Log.Create(Log.Types.ItemOperations, LogSourceType.Character, character.EntryId) .AddAttribute("source", 0.0, "honor_coins_for_bg").AddItemAttributes(asda2Item, "") .AddAttribute("amount", (double)honorCoins, "").Write(); } int bonusExp = this.WiningFactionId == 2 ? 0 : (int)((double)XpGenerator.GetBaseExpForLevel(character.Level) * (double)character.BattlegroundActPoints / 2.5); character.GainXp(bonusExp, "battle_ground", false); character.Asda2HonorPoints += honorPoints; AchievementProgressRecord progressRecord = character.Achievements.GetOrCreateProgressRecord(20U); if (character.FactionId == (FactionId)this.WiningFactionId) { switch (++progressRecord.Counter) { case 5: character.DiscoverTitle(Asda2TitleId.Challenger125); break; case 10: character.GetTitle(Asda2TitleId.Challenger125); break; case 25: character.DiscoverTitle(Asda2TitleId.Winner126); break; case 50: character.GetTitle(Asda2TitleId.Winner126); break; case 75: character.DiscoverTitle(Asda2TitleId.Champion127); break; case 100: character.GetTitle(Asda2TitleId.Champion127); break; case 250: character.DiscoverTitle(Asda2TitleId.Conqueror128); break; case 500: character.GetTitle(Asda2TitleId.Conqueror128); break; } progressRecord.SaveAndFlush(); } character.Resurrect(); character.Map.CallDelayed(500, (Action)(() => Asda2BattlegroundHandler.SendWarEndedResponse(character.Client, (byte)this.WiningFactionId, this.LightScores > this.DarkScores ? this.LightScores : this.DarkScores, this.LightScores > this.DarkScores ? this.DarkScores : this.LightScores, honorPoints, honorCoins, (long)bonusExp, this.MvpCharacter == null ? "" : this.MvpCharacter.Name))); Asda2BattlegroundHandler.SendWarEndedOneResponse(character.Client, (IEnumerable <Asda2Item>) new List <Asda2Item>() { asda2Item }); character.SendWarMsg("You will automaticly teleported to town in 1 minute."); }
public static void RegisterItemToAukRequest(IRealmClient client, RealmPacketIn packet) { Character activeCharacter = client.ActiveCharacter; Asda2PlayerInventory asda2Inventory = activeCharacter.Asda2Inventory; packet.Position += 15; int num1 = 0; List <Asda2ItemTradeRef> items = new List <Asda2ItemTradeRef>(); for (int index = 0; index < 5 && packet.RemainingLength >= 50; ++index) { packet.Position += 4; byte num2 = packet.ReadByte(); short num3 = packet.ReadInt16(); packet.Position += 12; int num4 = packet.ReadInt32(); packet.Position += 34; int num5 = packet.ReadInt32(); packet.Position += 41; if (num5 < 0 || num5 > 100000000) { client.ActiveCharacter.YouAreFuckingCheater( "Tried to use wrong price while registering auk items : " + (object)num3, 1); Asda2AuctionHandler.SendRegisterItemToAukCancelWindowResponse(client, (List <Asda2ItemTradeRef>)null); return; } if (num3 < (short)0 || num3 > (short)70) { client.ActiveCharacter.YouAreFuckingCheater( "Tried to use wrong cell while registering auk items : " + (object)num3, 1); Asda2AuctionHandler.SendRegisterItemToAukCancelWindowResponse(client, (List <Asda2ItemTradeRef>)null); return; } Asda2Item asda2Item; switch (num2) { case 1: asda2Item = asda2Inventory.ShopItems[(int)num3]; break; case 2: asda2Item = asda2Inventory.RegularItems[(int)num3]; break; default: client.ActiveCharacter.YouAreFuckingCheater( "Tried to use wrong inventory while registering auk items : " + (object)num2, 1); Asda2AuctionHandler.SendRegisterItemToAukCancelWindowResponse(client, (List <Asda2ItemTradeRef>)null); return; } items.Add(new Asda2ItemTradeRef() { Item = asda2Item, Amount = num4, Price = num5 }); num1 += num5; } if ((double)client.ActiveCharacter.Money <= (double)num1 * (double)CharacterFormulas.AuctionPushComission) { client.ActiveCharacter.SendAuctionMsg("Not enought money to register items."); Asda2AuctionHandler.SendRegisterItemToAukCancelWindowResponse(client, (List <Asda2ItemTradeRef>)null); } else { Asda2AuctionHandler.SendRegisterItemToAukCancelWindowResponse(client, items); foreach (Asda2ItemTradeRef itemRef in items) { if (itemRef.Item == null) { activeCharacter.SendAuctionMsg("Failed to register item cause not founded."); Asda2AuctionHandler.SendRegisterItemToAukCancelWindowResponse(client, (List <Asda2ItemTradeRef>)null); return; } if (itemRef.Amount < 0 || itemRef.Amount > itemRef.Item.Amount) { client.ActiveCharacter.YouAreFuckingCheater( "Tried to use wrong item amount while registering auk items : " + (object)itemRef.Amount, 1); Asda2AuctionHandler.SendRegisterItemToAukCancelWindowResponse(client, (List <Asda2ItemTradeRef>)null); return; } if (itemRef.Item.IsSoulbound) { client.ActiveCharacter.YouAreFuckingCheater( "Tried to use soulbounded item while registering auk items : " + (object)itemRef.Amount, 1); Asda2AuctionHandler.SendRegisterItemToAukCancelWindowResponse(client, (List <Asda2ItemTradeRef>)null); return; } asda2Inventory.AuctionItem(itemRef); } AchievementProgressRecord progressRecord = client.ActiveCharacter.Achievements.GetOrCreateProgressRecord(10U); switch (++progressRecord.Counter) { case 100: client.ActiveCharacter.DiscoverTitle(Asda2TitleId.Merchant48); break; case 200: client.ActiveCharacter.GetTitle(Asda2TitleId.Merchant48); break; } progressRecord.SaveAndFlush(); activeCharacter.SendAuctionMsg("You have success with registering auction items."); activeCharacter.SendMoneyUpdate(); } }