コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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();
            }
        }
コード例 #3
0
ファイル: Asda2PetHandler.cs プロジェクト: uvbs/Asda2-Server
        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);
            }
        }
コード例 #4
0
ファイル: Asda2PetHandler.cs プロジェクト: uvbs/Asda2-Server
        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);
            }
        }
コード例 #5
0
        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");
                }
            }
        }
コード例 #6
0
        // 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);
            }
        }
コード例 #7
0
 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);
     }
 }
コード例 #8
0
ファイル: AchievementHandler.cs プロジェクト: NVN/WCell
		// 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);
			}
		}
コード例 #9
0
ファイル: Asda2PvpHandler.cs プロジェクト: uvbs/Asda2-Server
        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);
            }
        }
コード例 #10
0
        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);
            }
        }
コード例 #11
0
ファイル: Asda2PetHandler.cs プロジェクト: uvbs/Asda2-Server
        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);
            }
        }
コード例 #12
0
ファイル: Asda2PetHandler.cs プロジェクト: uvbs/Asda2-Server
        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);
            }
        }
コード例 #13
0
        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);
            }
        }
コード例 #14
0
 public override bool IsAchieved(AchievementProgressRecord achievementProgressRecord)
 {
     return achievementProgressRecord.Counter >= ReputationAmount;
 }
コード例 #15
0
 public override bool IsAchieved(AchievementProgressRecord achievementProgressRecord)
 {
     return achievementProgressRecord.Counter >= NumberOfBankSlots;
 }
コード例 #16
0
 public virtual bool IsAchieved(AchievementProgressRecord achievementProgressRecord)
 {
     return false;
 }
コード例 #17
0
 public override bool IsAchieved(AchievementProgressRecord achievementProgressRecord)
 {
     return achievementProgressRecord.Counter >= (uint)SkillTierId;
 }
コード例 #18
0
 public override bool IsAchieved(AchievementProgressRecord achievementProgressRecord)
 {
     return achievementProgressRecord.Counter >= CompletedQuestCount;
 }
コード例 #19
0
        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);
                    }));
                }
            }
        }
コード例 #20
0
 // 108
 public override bool IsAchieved(AchievementProgressRecord achievementProgressRecord)
 {
     return achievementProgressRecord.Counter >= 1;
 }
コード例 #21
0
 /// <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);
 }
コード例 #22
0
        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;
        }
コード例 #23
0
        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);
            }
        }
コード例 #24
0
        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);
        }
コード例 #25
0
        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?());
            }
        }
コード例 #26
0
        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;
                }
            }
        }
コード例 #27
0
 public override bool IsAchieved(AchievementProgressRecord achievementProgressRecord)
 {
     return achievementProgressRecord.Counter >= NumberOfExaltedReputations;
 }
コード例 #28
0
 public override bool IsAchieved(AchievementProgressRecord achievementProgressRecord)
 {
     return achievementProgressRecord.Counter >= NumberOfVisitsAtBarberShop;
 }
コード例 #29
0
 /// <summary>
 /// Removes criteria progress from the player.
 /// </summary>
 /// <param name="achievementProgressRecord"></param>
 public void RemoveProgress(AchievementProgressRecord achievementProgressRecord)
 {
     m_progressRecords.Remove(achievementProgressRecord.AchievementCriteriaId);
 }
コード例 #30
0
        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.");
        }
コード例 #31
0
        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();
            }
        }