blizzless-diiis/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/GameUtilitiesService.cs
Gitea 267d087142 + Удалена большая часть Warnings.
+ Применено исправление деспауна Големов при их взрыве - fix from DeKaN
+ Добавлен патч для портала в новый тристрам со стороны Лощины Стенаний.
+ Добавлена новая подсистема "Друзья".
+ Добавлен звук продажи предметов
!Внимание тем кто тестирует - для поиска причины бага, добавлена в консоль информация при использовании Waypoint. Если вас телепортирует не в нужную локацию, скопируйте от туда текст ---Waypoint Debug---.
2022-08-21 11:39:59 +10:00

3846 lines
214 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//Blizzless Project 2022
//Blizzless Project 2022
using bgs.protocol;
//Blizzless Project 2022
using bgs.protocol.game_utilities.v1;
//Blizzless Project 2022
using bgs.protocol.notification.v1;
//Blizzless Project 2022
using D3.GameMessage;
//Blizzless Project 2022
using D3.Notification;
//Blizzless Project 2022
using D3.OnlineService;
//Blizzless Project 2022
using D3.Profile;
//Blizzless Project 2022
using DiIiS_NA.Core.Extensions;
//Blizzless Project 2022
using DiIiS_NA.Core.Logging;
//Blizzless Project 2022
using DiIiS_NA.Core.Storage;
//Blizzless Project 2022
using DiIiS_NA.Core.Storage.AccountDataBase.Entities;
//Blizzless Project 2022
using DiIiS_NA.GameServer.AchievementSystem;
//Blizzless Project 2022
using DiIiS_NA.LoginServer.AccountsSystem;
//Blizzless Project 2022
using DiIiS_NA.LoginServer.Base;
//Blizzless Project 2022
using DiIiS_NA.LoginServer.Battle;
//Blizzless Project 2022
using DiIiS_NA.LoginServer.GuildSystem;
//Blizzless Project 2022
using DiIiS_NA.LoginServer.Toons;
//Blizzless Project 2022
using Google.ProtocolBuffers;
//Blizzless Project 2022
using System;
//Blizzless Project 2022
using System.Collections.Generic;
//Blizzless Project 2022
using System.Linq;
namespace DiIiS_NA.LoginServer.ServicesSystem.Services
{
public class InitialLoginTask
{
private BattleClient Client;
public InitialLoginTask(BattleClient inClient)
{
Client = inClient;
}
public void run()
{
InitialLoginData.Builder Init = InitialLoginData.CreateBuilder();
Init.SetOutstandingOrder(D3.Store.Order.CreateBuilder().SetAcknowledged(true).SetErrorCode(0).SetStatus(0).SetTransactionId(0));
var GAS = D3.Client.GameAccountSettings.CreateBuilder()
.SetShowDifficultySelector(false)
.SetUseGameHandicapDeprecated(true)
.SetSeasonJourneySeasonNumber(10)
.SetViewedAnniversaryScreenYear(1)
.SetAccountFlags(0)
.SetAccountFlags((uint)D3.Account.Digest.Types.Flags.MASTER_DIFFICULTY_UNLOCKED)
.SetAchievementsTimeLastViewed(DateTimeExtensions.ToUnixTime(DateTime.UtcNow))
//.SetViewedAnniversaryScreenYear(1)
.SetViewedWhatsNewVersion(20)
.SetViewedWhatsNewSeason(20)
.SetRmtLastUsedCurrency("PLATINUM")
.SetRmtPreferredCurrency("PLATINUM")
;
//Client.Account.GameAccount.DBGameAccount.ViewedNewVersion = 8;
Init.SetChatRestrictionContentLicenseId(0);
Init.SetAchievementsContentHandle(D3.OnlineService.ContentHandle.CreateBuilder().SetHash("20375546335DA13E31554A104FE036B5BCC878D715108F1FCEB50AB85BD87478").SetRegion("EU").SetUsage(".achu"));
HeroDigestListResponse.Builder d = HeroDigestListResponse.CreateBuilder();
foreach (Toon t in Client.Account.GameAccount.Toons)
{
d.AddDigestList(t.Digest);
GAS.AddHeroListOrder(t.D3EntityID);
}
Init.SetGameAccountSettings(GAS);
Init.SetHeroDigests(d);
Init.SetAccountDigest(Client.Account.GameAccount.Digest);
/*Init.SetSyncedVars("OnlineService.Season.EarliestSeasonNum=4" +
" OnlineService.Season.Num=1" +
" OnlineService.Season.State=1" +
" OnlineService.FreeToPlay=true" +
" OnlineService.Leaderboard.Era=10" +
" OnlineService.AnniversaryEvent.Status=2" +
" ChallengeRift.ChallengeNumber=140" +
" OnlineService.Store.Status=0" +
" OnlineService.Store.ProductCatalogDigest=C42DC6117A7008EDA2006542D6C07EAD096DAD90" +
" OnlineService.Store.ProductCatalogVersion=633565800390338000" +
" OnlineService.Store.NewestProductTime=516240000000000000" +
" OnlineService.Region.Id=5");*/
Init.SetSyncedVars(
" OnlineService.Season.Num=1" + //Номер сезона
" OnlineService.Season.State=1" + //Статус сезона, 1 - Активирован, 0 - Деактивирован
" OnlineService.Leaderboard.Era=1" +
" OnlineService.AnniversaryEvent.Status=1" + //Событие юбилея, 1-Старый Тристам
" ChallengeRift.ChallengeNumber=1" + //Номер портала дерзаний.
" OnlineService.FreeToPlay=true" + //Магазин за платину
" OnlineService.Store.Status=0" + //Статус Магазина, 0 - Включен, 1 - Отключен
" OnlineService.Store.ProductCatalogDigest=C42DC6117A7008EDA2006542D6C07EAD096DAD90" + //China
" OnlineService.Store.ProductCatalogVersion=633565800390338000" + //Китайский каталог
//" OnlineService.Store.ProductCatalogDigest=79162283AFACCBA5DA989BD341F7B782860AC1F4" + //Euro
//" OnlineService.Store.ProductCatalogVersion=635984100169931000" + //Euro
" OnlineService.Region.Id=1"); //Регион
Init.SetSeenTutorials(ByteString.CopyFrom(Client.Account.GameAccount.DBGameAccount.SeenTutorials));
Init.SetMatchmakingPool("Default");
var guildInfo = D3.Guild.GuildInfoList.CreateBuilder();
if (Client.Account.GameAccount.Clan != null || Client.Account.GameAccount.Communities.Count > 0)
{
//*
if (Client.Account.GameAccount.Clan != null)
{
var clan = Client.Account.GameAccount.Clan;
var clanInfo = D3.Guild.GuildInfo.CreateBuilder()
.SetGuildId(clan.PersistentId)
.SetGuildCategory(0)
.SetGuildLeaderId(clan.Owner.PersistentID)
.SetName(clan.FullName)
.SetSearchable(clan.IsLFM)
.SetMemberNewsTime(clan.NewsTime)
.AddValidatedMemberIds(Client.Account.GameAccount.PersistentID)
.SetRankId(clan.GetRank(Client.Account.GameAccount.PersistentID))
.SetTotalMembers((uint)clan.Members.Count);
guildInfo.AddGuilds(clanInfo);
}
foreach (var community in Client.Account.GameAccount.Communities)
{
var communityInfo = D3.Guild.GuildInfo.CreateBuilder()
.SetGuildId(community.PersistentId)
.SetGuildLeaderId(community.Owner.PersistentID)
.SetGuildCategory(community.Category)
.SetName(community.Name)
.SetSearchable(community.IsLFM)
.SetMemberNewsTime(community.NewsTime)
.AddValidatedMemberIds(Client.Account.GameAccount.PersistentID)
.SetRankId(community.GetRank(Client.Account.GameAccount.PersistentID))
.SetTotalMembers((uint)community.Members.Count);
guildInfo.AddGuilds(communityInfo);
}
//*/
}
Init.SetGuilds(guildInfo);
Init.SetGuildInvites(D3.Guild.InviteInfoList.CreateBuilder().AddRangeInvites(Client.Account.GameAccount.GuildInvites));
Init.AddEras(EraInfo.CreateBuilder().SetId(0).SetNameDeprecated("TestEra"));
Init.SetLogonTime(DateTimeExtensions.ToUnixTime(DateTime.UtcNow));
Init.SetMissingEntitlements(D3.Store.MissingEntitlements.CreateBuilder().AddEntitlement(D3.Store.MissingEntitlement.CreateBuilder()));
ContentLicenses.Builder licences = ContentLicenses.CreateBuilder();
licences.AddLicenses(ContentLicense.CreateBuilder().SetId(0).SetQuantity(1)); // Diablo III
licences.AddLicenses(ContentLicense.CreateBuilder().SetId(1).SetQuantity(1)); // Diablo III Reaper Of Souls - MENU
licences.AddLicenses(ContentLicense.CreateBuilder().SetId(2).SetQuantity(1)); // Crusader
licences.AddLicenses(ContentLicense.CreateBuilder().SetId(3).SetQuantity(1)); // ?
licences.AddLicenses(ContentLicense.CreateBuilder().SetId(4).SetQuantity(1)); // Diablo III Reaper Of Souls - ACT V
licences.AddLicenses(ContentLicense.CreateBuilder().SetId(5).SetQuantity(1)); // ?
licences.AddLicenses(ContentLicense.CreateBuilder().SetId(6).SetQuantity(1)); // ?
//licences.AddLicenses(ContentLicense.CreateBuilder().SetId(7).SetQuantity(1)); // + 6 Heroes Slots
//licences.AddLicenses(ContentLicense.CreateBuilder().SetId(8).SetQuantity(1)); // + 2 Heroes Slots
//licences.AddLicenses(ContentLicense.CreateBuilder().SetId(9).SetQuantity(1)); // + 3 Heroes Slots
licences.AddLicenses(ContentLicense.CreateBuilder().SetId(10).SetQuantity(1)); // + 8 Heroes Slots
//licences.AddLicenses(ContentLicense.CreateBuilder().SetId(11).SetQuantity(1)); // + 1 Heroes Slots
licences.AddLicenses(ContentLicense.CreateBuilder().SetId(15).SetQuantity(1)); // Elite Edition
licences.AddLicenses(ContentLicense.CreateBuilder().SetId(20).SetQuantity(1)); // Necromancer
//licences.AddLicenses(ContentLicense.CreateBuilder().SetId(16).SetQuantity(1)); // Blue Booster
//licences.AddLicenses(ContentLicense.CreateBuilder().SetId(17).SetQuantity(1)); // Gold Booster
//licences.AddLicenses(ContentLicense.CreateBuilder().SetId(18).SetQuantity(5)); // Red Booster
//.SetExpireTime(900000) - Просрочка)
Init.SetContentLicenses(licences);
// Build response
InitialLoginDataResponse.Builder res = InitialLoginDataResponse.CreateBuilder();
res.SetErrorCode(0U)
.SetServiceId(Client.GuildChannelsRevealed ? 0U : 1U)
.SetLoginData(Init);
// Build notification
bgs.protocol.notification.v1.Notification.Builder builder = bgs.protocol.notification.v1.Notification.CreateBuilder();
builder.SetSenderId(bgs.protocol.EntityId.CreateBuilder().SetHigh(0).SetLow(0));
builder.SetTargetAccountId(Client.Account.BnetEntityId);
builder.SetTargetId(Client.Account.GameAccount.BnetEntityId);
builder.SetType("D3.NotificationMessage");
bgs.protocol.Attribute.Builder messageId = bgs.protocol.Attribute.CreateBuilder();
messageId.SetName("D3.NotificationMessage.MessageId")
.SetValue(Variant.CreateBuilder().SetIntValue(1)); // InitialLoginDataResponse
bgs.protocol.Attribute.Builder payload = bgs.protocol.Attribute.CreateBuilder();
payload.SetName("D3.NotificationMessage.Payload")
.SetValue(Variant.CreateBuilder().SetMessageValue(res.Build().ToByteString()));
builder.AddAttribute(messageId);
builder.AddAttribute(payload);
Client.MakeRPC((lid) => NotificationListener.CreateStub(Client).OnNotificationReceived(new HandlerController() { ListenerId = lid }, builder.Build(), callback => { }));
if (!Client.GuildChannelsRevealed)
{
Client.GuildChannelsRevealed = true;
GuildManager.ReplicateGuilds(Client.Account.GameAccount);
}
}
}
[Service(serviceID: 0x38, serviceName: "bnet.protocol.game_utilities.GameUtilities"), ]
public class GameUtilitiesService : bgs.protocol.game_utilities.v1.GameUtilitiesService, IServerService
{
private static readonly Logger Logger = LogManager.CreateLogger();
public static ulong counter { get; set; }
public override void ProcessClientRequest(IRpcController controller, ClientRequest request, Action<ClientResponse> done)
{
ClientResponse.Builder builder = ClientResponse.CreateBuilder();
var attr = bgs.protocol.Attribute.CreateBuilder();
int messageId = (int)request.GetAttribute(1).Value.IntValue;
#if DEBUG
if (messageId != 270)
Logger.Info("ProcessClientRequest() ID: {0}", messageId);
#endif
switch ((controller as HandlerController).Client.Account.GameAccount.ProgramField.Value)
{
case "D3":
switch (messageId)
{
case 0: // HeroDigestListRequest
ByteString digest = OnHeroDigestListRequest((controller as HandlerController).Client, request.GetAttribute(2).Value.MessageValue);
attr.SetValue(Variant.CreateBuilder().SetMessageValue(digest));
break;
case 1: // CreateHero
ByteString hero = OnHeroCreateParams((controller as HandlerController).Client, request.GetAttribute(2).Value.MessageValue);
if (hero != null)
attr.SetValue(Variant.CreateBuilder().SetMessageValue(hero));
else
(controller as HandlerController).Status = 17;
break;
case 2: // DeleteHero
ByteString hero1 = OnHeroDeleteParams((controller as HandlerController).Client, request.GetAttribute(2).Value.MessageValue);
attr.SetValue(Variant.CreateBuilder().SetMessageValue(hero1));
break;
case 3: // Выбор Персонажа
ByteString SwitchHero = SwitchCharRequest((controller as HandlerController).Client, request.GetAttribute(2).Value.MessageValue);
attr.SetValue(Variant.CreateBuilder().SetMessageValue(SwitchHero));
break;
case 4: //D3.GameMessages.SaveBannerConfiguration -> return MessageId with no Message
SaveBanner((controller as HandlerController).Client, request.GetAttribute(2).Value.MessageValue);
var attrId = bgs.protocol.Attribute.CreateBuilder()
.SetName("CustomMessageId")
.SetValue(bgs.protocol.Variant.CreateBuilder().SetIntValue(5).Build())
.Build();
builder.AddAttribute(attrId);
break;
case 6: // InitialLoginDataRequest -> InitialLoginDataQueuedResponse
ByteString loginData = OnInitialLoginDataRequest((controller as HandlerController).Client, request.GetAttribute(2).Value.MessageValue);
attr.SetValue(Variant.CreateBuilder().SetMessageValue(loginData));
break;
case 7:
var getAccountSettings = GetGameAccountSettings((controller as HandlerController).Client);
attr.SetValue(bgs.protocol.Variant.CreateBuilder().SetMessageValue(getAccountSettings).Build());
break;
case 8:
var setAccountSettings = SetGameAccountSettings(D3.GameMessage.SetGameAccountSettings.ParseFrom(request.GetAttribute(2).Value.MessageValue), (controller as HandlerController).Client);
attr.SetValue(bgs.protocol.Variant.CreateBuilder().SetMessageValue(setAccountSettings).Build());
break;
case 9: // GetToonSettings -> ToonSettings
ByteString toonSettings = OnGetToonSettings((controller as HandlerController).Client, request.GetAttribute(2).Value.MessageValue);
attr.SetValue(Variant.CreateBuilder().SetMessageValue(toonSettings));
break;
case 10: // SetToonSettings -> Empty Message???
ByteString Current = GetAchievements((controller as HandlerController).Client, request.GetAttribute(2).Value.MessageValue);
attr.SetValue(Variant.CreateBuilder().SetMessageValue(Current));
// attr.SetValue(Variant.CreateBuilder().SetMessageValue(ByteString.Empty));
break;
case 14: //D3.GameMessage.GetAccountProfiles
var getprofile1 = CollectProfiles((controller as HandlerController).Client, request.GetAttribute(2).Value.MessageValue);
attr.SetValue(Variant.CreateBuilder().SetMessageValue(getprofile1));
//CollectHeroesProfiles
break;
case 15: //D3.GameMessage.GetHeroProfiles -> D3.Profile.HeroProfileList
//var gettoon = SelectToon(Client.Connect, request.GetAttribute(2).Value.MessageValue);
var heroprofs = GetHeroProfs((controller as HandlerController).Client, request.GetAttribute(2).Value.MessageValue);
attr.SetValue(Variant.CreateBuilder().SetMessageValue(heroprofs));
break;
case 16: // GetAccountPrefs -> (D3.Client.)Preferences
ByteString prefs = OnGetAccountPrefs((controller as HandlerController).Client, request.GetAttribute(2).Value.MessageValue);
attr.SetValue(Variant.CreateBuilder().SetMessageValue(prefs));
break;
case 18: //
//ByteString TestNB = TestRequest((controller as HandlerController).Client, request.GetAttribute(2).Value.MessageValue);
//attr.SetValue(Variant.CreateBuilder().SetMessageValue(TestNB));
break;
case 19: // Получение всей косметики
ByteString CurrentToon = GetCollectionAccout((controller as HandlerController).Client, request.GetAttribute(2).Value.MessageValue);
attr.SetValue(Variant.CreateBuilder().SetMessageValue(CurrentToon));
break;
case 23: //Информация о погибших персонажах
var herodeadprofs = GetDeadedHeroProfs((controller as HandlerController).Client, request.GetAttribute(2).Value.MessageValue);
attr.SetValue(Variant.CreateBuilder().SetMessageValue(herodeadprofs));
var attr2 = bgs.protocol.Attribute.CreateBuilder();
var herodeaddigests = GetDeadedHeroDigests((controller as HandlerController).Client, request.GetAttribute(2).Value.MessageValue);
attr2.SetValue(Variant.CreateBuilder().SetMessageValue(herodeaddigests));
attr2.SetName("CustomMessage2");
builder.AddAttribute(attr2);
break;
case 27: //GetAchievementsInfo
//ByteString ClearActsResponse = ClearMissions(Client.Connect, request.GetAttribute(2).Value.MessageValue);
//attr.SetValue(Variant.CreateBuilder().SetMessageValue(ClearActsResponse));
break;
case 29: //Set Cosmetic
ByteString Current1 = SetCollection((controller as HandlerController).Client, request.GetAttribute(2).Value.MessageValue);
attr.SetValue(Variant.CreateBuilder().SetMessageValue(Current1));
break;
case 32: //ChallengeRift Fetch HeroData
ByteString ChallengeRift = GetChallengeRift((controller as HandlerController).Client, request.GetAttribute(2).Value.MessageValue);
attr.SetValue(Variant.CreateBuilder().SetMessageValue(ChallengeRift));
break;
case 33: //Rebirth
ByteString RebirthResponse = RebirthMethod((controller as HandlerController).Client, request.GetAttribute(2).Value.MessageValue);
attr.SetValue(Variant.CreateBuilder().SetMessageValue(RebirthResponse));
break;
case 120: //Создание гильдии
ByteString CreatedGuild = CreateGuild((controller as HandlerController).Client, request.GetAttribute(2).Value.MessageValue);
attr.SetValue(Variant.CreateBuilder().SetMessageValue(CreatedGuild));
break;
case 121: //TODO: Приглашение в клан
ByteString GSuggest = GuildInvit((controller as HandlerController).Client, request.GetAttribute(2).Value.MessageValue);
attr.SetValue(Variant.CreateBuilder().SetMessageValue(GSuggest).Build());
break;
case 122: //Вступление в гильдию
ByteString InvitedToGuild = AcceptInviteToGuild((controller as HandlerController).Client, request.GetAttribute(2).Value.MessageValue);
attr.SetValue(Variant.CreateBuilder().SetMessageValue(InvitedToGuild));
break;
case 124: //TODO: Сообщение дня в клане
GuildSetMOTD((controller as HandlerController).Client, D3.GameMessage.GuildSetMotd.ParseFrom(request.GetAttribute(2).Value.MessageValue));
break;
case 125: //TODO: Добавить новость в клане
GuildSetNews((controller as HandlerController).Client, D3.GameMessage.GuildSetNews.ParseFrom(request.GetAttribute(2).Value.MessageValue));
break;
case 127: //Изменения в ранге
break;
case 129: //Повышение в звании
var promote = GuildPromoteMember((controller as HandlerController).Client, D3.GameMessage.GuildPromoteMember.ParseFrom(request.GetAttribute(2).Value.MessageValue));
attr.SetValue(Variant.CreateBuilder().SetMessageValue(promote).Build());
break;
case 130: //Понижение в звании
var demote = GuildDemoteMember((controller as HandlerController).Client, D3.GameMessage.GuildDemoteMember.ParseFrom(request.GetAttribute(2).Value.MessageValue));
attr.SetValue(Variant.CreateBuilder().SetMessageValue(demote).Build());
break;
case 132: //Выход из гильдии
ByteString ExitFrGuild = ExitFromGuild((controller as HandlerController).Client, request.GetAttribute(2).Value.MessageValue);
attr.SetValue(Variant.CreateBuilder().SetMessageValue(ExitFrGuild));
break;
case 133: //Кик из клана
GuildKickMemberP((controller as HandlerController).Client, D3.GameMessage.GuildKickMember.ParseFrom(request.GetAttribute(2).Value.MessageValue));
break;
case 134: //Роспуск клана
GuildDisband((controller as HandlerController).Client, D3.GameMessage.GuildId.ParseFrom(request.GetAttribute(2).Value.MessageValue));
break;
case 138: //Создание гильдии
ByteString CreatedComm = CreateCommunity((controller as HandlerController).Client, request.GetAttribute(2).Value.MessageValue);
attr.SetValue(Variant.CreateBuilder().SetMessageValue(CreatedComm));
break;
case 144: //TODO: Информация о клане
GuildSetDescription((controller as HandlerController).Client, D3.GameMessage.GuildSetDescription.ParseFrom(request.GetAttribute(2).Value.MessageValue));
break;
case 146: //TODO:
var inviteList = GetInviteList((controller as HandlerController).Client, D3.GameMessage.GuildId.ParseFrom(request.GetAttribute(2).Value.MessageValue));
attr.SetValue(Variant.CreateBuilder().SetMessageValue(inviteList).Build());
break;
case 148: //Запрос на вступление в гильдию
ByteString Suggest = GuildSuggest((controller as HandlerController).Client, D3.GameMessage.GuildSuggest.ParseFrom(request.GetAttribute(2).Value.MessageValue));
attr.SetValue(Variant.CreateBuilder().SetMessageValue(Suggest));
//ByteString Invite = InviteToGuild((controller as HandlerController).Client, request.GetAttribute(2).Value.MessageValue);
//attr.SetValue(Variant.CreateBuilder().SetMessageValue(Invite));
break;
case 149:
GuildSuggestionResponse((controller as HandlerController).Client, D3.GameMessage.GuildSuggestionResponse.ParseFrom(request.GetAttribute(2).Value.MessageValue));
break;
case 150:// Новости клана
ByteString news = GuildFetchNews((controller as HandlerController).Client, D3.GameMessage.GuildFetchNews.ParseFrom(request.GetAttribute(2).Value.MessageValue));
attr.SetValue(Variant.CreateBuilder().SetMessageValue(news).Build());
//GetInviteList((controller as HandlerController).Client, D3.GameMessage.GuildId.ParseFrom(request.GetAttribute(2).Value.MessageValue));
break;
case 152: //Отмена запроса на вступление в гильду
GuildCancelInvite((controller as HandlerController).Client, D3.GameMessage.GuildCancelInvite.ParseFrom(request.GetAttribute(2).Value.MessageValue));
break;
case 156: //Изменение настроек гильдии
GuildLFM((controller as HandlerController).Client, D3.GameMessage.GuildSetLFM.ParseFrom(request.GetAttribute(2).Value.MessageValue));
break;
case 190: //Поиск гильдии
ByteString GuildSearch = SearchGuilds((controller as HandlerController).Client, request.GetAttribute(2).Value.MessageValue);
attr.SetValue(Variant.CreateBuilder().SetMessageValue(GuildSearch));
break;
case 200: //Рейтинг
ByteString Rating = GetRating((controller as HandlerController).Client, request.GetAttribute(2).Value.MessageValue);
attr.SetValue(Variant.CreateBuilder().SetMessageValue(Rating));
break;
case 201: //Рейтинг1
ByteString Rating1 = GetRatingAlt((controller as HandlerController).Client, request.GetAttribute(2).Value.MessageValue);
attr.SetValue(Variant.CreateBuilder().SetMessageValue(Rating1));
break;
case 202: //Рейтинг1
ByteString Rating2 = GetRatingPersonal((controller as HandlerController).Client, request.GetAttribute(2).Value.MessageValue);
attr.SetValue(Variant.CreateBuilder().SetMessageValue(Rating2));
break;
case 210:
ByteString StoreResponse = CurrentStore((controller as HandlerController).Client, request.GetAttribute(2).Value.MessageValue);
attr.SetValue(Variant.CreateBuilder().SetMessageValue(StoreResponse));
break;
case 211:
ByteString StoreResponse1 = CurrentStore1((controller as HandlerController).Client, request.GetAttribute(2).Value.MessageValue);
attr.SetValue(Variant.CreateBuilder().SetMessageValue(StoreResponse1));
break;
case 212: //Покупка
ByteString CurrentWalletResponse = CurrentWallet((controller as HandlerController).Client, request.GetAttribute(2).Value.MessageValue);
attr.SetValue(Variant.CreateBuilder().SetMessageValue(CurrentWalletResponse));
break;
case 213: //Реальная валюта
ByteString CurrentPrimaryWalletResponse = CurrentPrimaryWallet((controller as HandlerController).Client, request.GetAttribute(2).Value.MessageValue);
attr.SetValue(Variant.CreateBuilder().SetMessageValue(CurrentPrimaryWalletResponse));
break;
case 216: //Коллекция
ByteString Test = TestRequest((controller as HandlerController).Client, request.GetAttribute(2).Value.MessageValue);
attr.SetValue(Variant.CreateBuilder().SetMessageValue(Test));
break;
case 230: //GetAchievemntSnapshot
var GetAchievementsSnapshot = CollectAchivementsSnapshot((controller as HandlerController).Client, request.GetAttribute(2).Value.MessageValue);
attr.SetValue(Variant.CreateBuilder().SetMessageValue(GetAchievementsSnapshot));
break;
case 250: //Покупка
ByteString SwitchParams = SwitchParametrs((controller as HandlerController).Client, request.GetAttribute(2).Value.MessageValue);
attr.SetValue(Variant.CreateBuilder().SetMessageValue(SwitchParams));
break;
case 270: //Покупка
ByteString TestResponse = SendWarden3Custom((controller as HandlerController).Client, request.GetAttribute(2).Value.MessageValue);
attr.SetValue(Variant.CreateBuilder().SetMessageValue(TestResponse));
break;
}
if (attr.HasValue)
{
attr.SetName("CustomMessage");
builder.AddAttribute(attr);
}
break;
}
done(builder.Build());
if (messageId == 6)
{
var LogTask = new InitialLoginTask((controller as HandlerController).Client);
LogTask.run();
}
}
#region Методы сервиса
public override void GetAchievementsFile(IRpcController controller, GetAchievementsFileRequest request, Action<GetAchievementsFileResponse> done)
{
throw new NotImplementedException();
}
public override void GetAllValuesForAttribute(IRpcController controller, GetAllValuesForAttributeRequest request, Action<GetAllValuesForAttributeResponse> done)
{
throw new NotImplementedException();
}
public override void GetPlayerVariables(IRpcController controller, GetPlayerVariablesRequest request, Action<GetPlayerVariablesResponse> done)
{
throw new NotImplementedException();
}
public override void OnGameAccountOffline(IRpcController controller, GameAccountOfflineNotification request, Action<NO_RESPONSE> done)
{
throw new NotImplementedException();
}
public override void OnGameAccountOnline(IRpcController controller, GameAccountOnlineNotification request, Action<NO_RESPONSE> done)
{
throw new NotImplementedException();
}
public override void PresenceChannelCreated(IRpcController controller, PresenceChannelCreatedRequest request, Action<NoData> done)
{
throw new NotImplementedException();
}
public override void ProcessServerRequest(IRpcController controller, ServerRequest request, Action<ServerResponse> done)
{
throw new NotImplementedException();
}
#endregion
#region Diablo 3
#region Система рейтинга
private ByteString GetRatingPersonal(BattleClient Client, ByteString data)
{
var request = D3.GameMessage.LeaderboardGetHeroSnapshot.ParseFrom(data);
var response = D3.GameMessage.LeaderboardGetHeroSnapshotResponse.CreateBuilder();
bool Season = false;
bool Hardcore = false;
ToonClass NeededClass = 0;
switch (request.LeaderboardId)
{
case 1:
break;
case 2: NeededClass = ToonClass.Barbarian; break; // Варвар
case 3: NeededClass = ToonClass.Crusader; break; // Крестоносец
case 4: NeededClass = ToonClass.DemonHunter; break; // Охотник на демонов
case 5: NeededClass = ToonClass.Monk; break; // Монах
case 6: NeededClass = ToonClass.WitchDoctor; break; // Колдун
case 7: NeededClass = ToonClass.Wizard; break; // Чародей
case 8: NeededClass = ToonClass.Necromancer; break; // Некромант
case 10: // Двойки
break;
case 11: // Тройки
break;
case 12: // Четверки
break;
case 30: //Портал Дерзаний - 1 Игрок
case 31: //Портал Дерзаний - 2 Игрока
case 32: //Портал Дерзаний - 3 Игрока
case 33: //Портал Дерзаний - 4 Игрока
default:
break;
}
switch (request.ScopeId)
{
case 3: break; //Обычный режим
case 2: Hardcore = true; break; //Героический режим
case 5: Season = true; break; //Сезонный
case 4: Season = true; Hardcore = true; break; //Сезонный героический
}
List<DBGameAccount> GA = DBSessions.SessionQuery<DBGameAccount>().Where(a => a.Id == request.GameAccountId).ToList();
var Heroes = ToonManager.GetToonsForGameAccount(GameAccountManager.GetGameAccountByDBGameAccount(GA[0]));
Toon Hero = null;
byte uplvl = 0;
int idx = -1;
if (Heroes.Count > 0)
{
for (int i = 0; i < Heroes.Count; i++)
{
if (Season == true && !Heroes[i].isSeassoned) continue;
if (Hardcore == true && !Heroes[i].IsHardcore) continue;
if (Heroes[i].Class != NeededClass && (uint)NeededClass != 0) continue;
if (uplvl > Heroes[i].Level) continue;
uplvl = Heroes[i].Level;
idx = i;
}
if (idx > -1)
Hero = Heroes[idx];
}
if (Hero != null)
{
var Snapshot = D3.Leaderboard.HeroSnapshot.CreateBuilder()
.SetHeroId(Hero.D3EntityID)
.AddCosmeticItems(D3.Leaderboard.HeroCosmeticItem.CreateBuilder().SetCosmeticVisualInventorySlot(1).SetGbid(Hero.Cosmetic1))
.AddCosmeticItems(D3.Leaderboard.HeroCosmeticItem.CreateBuilder().SetCosmeticVisualInventorySlot(2).SetGbid(Hero.Cosmetic2))
.AddCosmeticItems(D3.Leaderboard.HeroCosmeticItem.CreateBuilder().SetCosmeticVisualInventorySlot(3).SetGbid(Hero.Cosmetic3))
.AddCosmeticItems(D3.Leaderboard.HeroCosmeticItem.CreateBuilder().SetCosmeticVisualInventorySlot(4).SetGbid(Hero.Cosmetic4))
.SetActiveSkills(SkillsWithRunes.CreateBuilder()
.AddRunes(SkillWithRune.CreateBuilder().SetSkill(Hero.DBActiveSkills.Skill0).SetRuneType(Hero.DBActiveSkills.Rune0))
.AddRunes(SkillWithRune.CreateBuilder().SetSkill(Hero.DBActiveSkills.Skill1).SetRuneType(Hero.DBActiveSkills.Rune1))
.AddRunes(SkillWithRune.CreateBuilder().SetSkill(Hero.DBActiveSkills.Skill2).SetRuneType(Hero.DBActiveSkills.Rune2))
.AddRunes(SkillWithRune.CreateBuilder().SetSkill(Hero.DBActiveSkills.Skill3).SetRuneType(Hero.DBActiveSkills.Rune3))
.AddRunes(SkillWithRune.CreateBuilder().SetSkill(Hero.DBActiveSkills.Skill4).SetRuneType(Hero.DBActiveSkills.Rune4))
.AddRunes(SkillWithRune.CreateBuilder().SetSkill(Hero.DBActiveSkills.Skill5).SetRuneType(Hero.DBActiveSkills.Rune5)))
.SetActiveTraits(PassiveSkills.CreateBuilder().AddSnoTraits(Hero.DBActiveSkills.Passive0).AddSnoTraits(Hero.DBActiveSkills.Passive1).AddSnoTraits(Hero.DBActiveSkills.Passive2).AddSnoTraits(Hero.DBActiveSkills.Passive3));
foreach (var item in Hero.Profile.Equipment.ItemsList)
{
int pos = 0;
switch ((item.ItemSlot - 272) / 16)
{
case 1: pos = 0; break; //0 - Шлем
case 2: pos = 1; break; //1 - Торс
case 3: pos = 5; break; //5 - Вспомогательная рука
case 4: pos = 4; break; //4 - Основная рука
case 5: pos = 3; break; //3 - Перчатки
//case 6: pos = 8; break; // - Пояс
case 7: pos = 2; break; //2 - Ботинки
case 8: pos = 6; break; //6 - Наплечники
case 9: pos = 7; break; //7 - Штаны
default:
int s = (item.ItemSlot - 272) / 16;
pos = 9;
break;
}
Snapshot.AddEquippedItems(D3.Leaderboard.HeroEquippedItem.CreateBuilder()
.SetGenerator(item.Generator)
.SetVisualInventorySlot(pos)
);
}
;
//Snapshot.AddEquippedItems(D3.Leaderboard.HeroEquippedItem.CreateBuilder());
response.SetSnapshot(Snapshot);
}
return response.Build().ToByteString();
}
private ByteString GetRatingAlt(BattleClient Client, ByteString data)
{
var request = D3.GameMessage.LeaderboardFetchScores.ParseFrom(data);
var response = LeaderboardFetchScoresResponse.CreateBuilder();
bool Season = false;
bool Hardcore = false;
ToonClass NeededClass = ToonClass.Unknown;
switch (request.LeaderboardId)
{
case 1:
break;
case 2: NeededClass = ToonClass.Barbarian; break; // Варвар
case 3: NeededClass = ToonClass.Crusader; break; // Крестоносец
case 4: NeededClass = ToonClass.DemonHunter; break; // Охотник на демонов
case 5: NeededClass = ToonClass.Monk; break; // Монах
case 6: NeededClass = ToonClass.WitchDoctor; break; // Колдун
case 7: NeededClass = ToonClass.Wizard; break; // Чародей
case 8: NeededClass = ToonClass.Necromancer; break; // Некромант
case 10: // Двойки
break;
case 11: // Тройки
break;
case 12: // Четверки
break;
case 30: //Портал Дерзаний - 1 Игрок
case 31: //Портал Дерзаний - 2 Игрока
case 32: //Портал Дерзаний - 3 Игрока
case 33: //Портал Дерзаний - 4 Игрока
default:
break;
}
switch (request.ScopeId)
{
case 3: break; //Обычный режим
case 2: Hardcore = true; break; //Героический режим
case 5: Season = true; break; //Сезонный
case 4: Season = true; Hardcore = true; break; //Сезонный героический
}
//foreach (var gameaccount in request.GameAccountIdsList)
//var DBGA = DBSessions.SessionQuery<DBGameAccount>().Where(a => a.Id == gameaccount).First();
List<DBGameAccount> PregameAccounts = DBSessions.SessionQuery<DBGameAccount>().ToList();
foreach (var gameaccount in request.GameAccountIdsList)
{
DBGameAccount Gacount = DBSessions.SessionQuery<DBGameAccount>().Where(a => a.Id == gameaccount).First();
var Heroes = ToonManager.GetToonsForGameAccount(GameAccountManager.GetGameAccountByDBGameAccount(Gacount));
Toon Hero = null;
byte uplvl = 0;
int idx = -1;
if (Heroes.Count > 0)
{
for (int i = 0; i < Heroes.Count; i++)
{
if (Season == true && !Heroes[i].isSeassoned) continue;
if (Hardcore == true && !Heroes[i].IsHardcore) continue;
if (Heroes[i].Class != NeededClass && NeededClass != ToonClass.Unknown) continue;
if (uplvl > Heroes[i].Level) continue;
uplvl = Heroes[i].Level;
idx = i;
}
if (idx > -1)
Hero = Heroes[idx];
}
if (Hero != null)
try
{
GameAccount Gaccount = GameAccountManager.GetGameAccountByDBGameAccount(Gacount);
Account account = AccountManager.GetAccountByPersistentID(Gaccount.AccountId);
var Memb = D3.Leaderboard.Member.CreateBuilder()
.SetAccountId(Gaccount.AccountId)
.SetHeroSeasonCreated((uint)Hero.SeasonCreated)
.SetBattleTag(account.BattleTagName)
.SetHeroAltLevel((uint)Gaccount.DBGameAccount.ParagonLevel)
.SetHeroFlags((uint)Hero.Flags)
.SetHeroLevel((uint)Hero.Level)
.SetHeroGbidClass((uint)Hero.ClassID)
.SetHeroName(Hero.Name)
.SetHeroSnapshotAvailable(true)
.SetHeroVisualEquipment(Gaccount.Toons[0].Digest.VisualEquipment);
if (Gaccount.Clan != null)
{
Memb.SetClanId(Gaccount.Clan.GuildId.GuildId_).SetClanTag(Gaccount.Clan.Prefix).SetClanName(Gaccount.Clan.Name);
}
response
.AddEntry(D3.Leaderboard.Score.CreateBuilder()
.SetGameAccountId(Gaccount.AccountId)
.SetScore_((ulong)Hero.Level + (ulong)Gaccount.DBGameAccount.ParagonLevel) //Временное разделение
.SetScoreBand(5)
.SetLeaderboardId(5)
.SetScopeId(5)
.SetTimestamp(DateTimeExtensions.ToUnixTime(DateTime.UtcNow))
.SetMetadata(D3.Leaderboard.Metadata.CreateBuilder()
.SetAct1TimeMs(0)
.SetAct2TimeMs(0)
.SetAct3TimeMs(0)
.SetAct4TimeMs(0)
.SetAct5TimeMs(0)
.SetLevelSeed(0)
.SetCheated(false)
.AddTeamMember(Memb)
.SetChallengeData(D3.Leaderboard.WeeklyChallengeData.CreateBuilder()
.SetBnetAccountId(unchecked((uint)account.BnetEntityId.Low))
.SetGameAccountId(GameAccountHandle.CreateBuilder().SetId(unchecked((uint)Gaccount.BnetEntityId.Low)).SetProgram(17459).SetRegion(1))
.SetHeroSnapshot(D3.Hero.SavedDefinition.CreateBuilder().SetVersion(905)
.SetDigest(Hero.Digest)
.SetSavedAttributes(D3.AttributeSerializer.SavedAttributes.CreateBuilder()))
.SetAccountSnapshot(D3.Account.SavedDefinition.CreateBuilder().SetVersion(905)
.SetDigest(Gaccount.Digest))
.SetRiftSnapshot(D3.Leaderboard.RiftSnapshot.CreateBuilder()
.SetRiftSeed(2342341)
.SetRiftTier(1)
.SetSnoDungeonFinder(1)
.SetSnoBoss(1)
.SetDeprecatedCompletionSeconds(10)
.SetNumDeaths(1)))
));
}
catch
{
}
}
return response.Build().ToByteString();
}
private ByteString GetRating(BattleClient Client, ByteString data)
{
LeaderboardList request = LeaderboardList.ParseFrom(data);
bool Season = false;
bool Hardcore = false;
ToonClass NeededClass = ToonClass.Unknown;
switch (request.LeaderboardId)
{
case 1:
break;
case 2: NeededClass = ToonClass.Barbarian; break; // Варвар
case 3: NeededClass = ToonClass.Crusader; break; // Крестоносец
case 4: NeededClass = ToonClass.DemonHunter; break; // Охотник на демонов
case 5: NeededClass = ToonClass.Monk; break; // Монах
case 6: NeededClass = ToonClass.WitchDoctor; break; // Колдун
case 7: NeededClass = ToonClass.Wizard; break; // Чародей
case 8: NeededClass = ToonClass.Necromancer; break; // Некромант
case 10: // Двойки
break;
case 11: // Тройки
break;
case 12: // Четверки
break;
case 30: //Портал Дерзаний - 1 Игрок
case 31: //Портал Дерзаний - 2 Игрока
case 32: //Портал Дерзаний - 3 Игрока
case 33: //Портал Дерзаний - 4 Игрока
default:
break;
}
switch (request.ScopeId)
{
case 3: break; //Обычный режим
case 2: Hardcore = true; break; //Героический режим
case 5: Season = true; break; //Сезонный
case 4: Season = true; Hardcore = true; break; //Сезонный героический
}
var Result = LeaderboardListResponse.CreateBuilder()
.SetLimit(request.Limit)
.SetOffset(request.Offset)
.SetVersion(request.Version)
;
List<DBGameAccount> gameAccounts = DBSessions.SessionQuery<DBGameAccount>().ToList();
foreach (var Gacount in gameAccounts)
{
var Heroes = ToonManager.GetToonsForGameAccount(GameAccountManager.GetGameAccountByDBGameAccount(Gacount));
Toon Hero = null;
byte uplvl = 0;
int idx = -1;
if (Heroes.Count > 0)
{
for (int i = 0; i < Heroes.Count; i++)
{
if (Season == true && !Heroes[i].isSeassoned) continue;
if (Hardcore == true && !Heroes[i].IsHardcore) continue;
if (Heroes[i].Class != NeededClass && NeededClass != ToonClass.Unknown) continue;
if (uplvl > Heroes[i].Level) continue;
uplvl = Heroes[i].Level;
idx = i;
}
if (idx > -1)
Hero = Heroes[idx];
}
if (Hero != null)
try
{
GameAccount Gaccount = GameAccountManager.GetGameAccountByDBGameAccount(Gacount);
Account account = AccountManager.GetAccountByPersistentID(Gaccount.AccountId);
var Memb = D3.Leaderboard.Member.CreateBuilder()
.SetAccountId((uint)Gaccount.D3GameAccountId.IdLow)
.SetHeroSeasonCreated((uint)Hero.SeasonCreated)
.SetBattleTag(account.BattleTagName)
.SetHeroAltLevel((uint)Gaccount.DBGameAccount.ParagonLevel)
.SetHeroFlags((uint)Hero.Flags)
.SetHeroLevel((uint)Hero.Level)
.SetHeroGbidClass((uint)Hero.ClassID)
.SetHeroName(Hero.Name)
.SetHeroSnapshotAvailable(true)
.SetHeroVisualEquipment(Gaccount.Toons[0].Digest.VisualEquipment);
if (Gaccount.Clan != null)
{
Memb.SetClanId(Gaccount.Clan.GuildId.GuildId_).SetClanTag(Gaccount.Clan.Prefix).SetClanName(Gaccount.Clan.Name);
}
Result
.AddEntry(D3.Leaderboard.Slot.CreateBuilder()
.SetGameAccountId(Gaccount.AccountId)
//TODO: Нужно реализовать расчёт от времени прохождения портала!
.SetScore((ulong)Hero.Level + (ulong)Gaccount.DBGameAccount.ParagonLevel) //Временное разделение
.SetTimestamp(DateTimeExtensions.ToUnixTime(DateTime.UtcNow))
.SetMetadata(D3.Leaderboard.Metadata.CreateBuilder()
.SetAct1TimeMs(0)
.SetAct2TimeMs(0)
.SetAct3TimeMs(0)
.SetAct4TimeMs(0)
.SetAct5TimeMs(0)
.SetLevelSeed(1)
.SetChallengeData(D3.Leaderboard.WeeklyChallengeData.CreateBuilder()
.SetBnetAccountId(unchecked((uint)account.BnetEntityId.Low))
.SetGameAccountId(GameAccountHandle.CreateBuilder().SetId(unchecked((uint)Gaccount.BnetEntityId.Low)).SetProgram(17459).SetRegion(1))
.SetHeroSnapshot(D3.Hero.SavedDefinition.CreateBuilder().SetVersion(905)
.SetDigest(Hero.Digest)
.SetSavedAttributes(D3.AttributeSerializer.SavedAttributes.CreateBuilder()))
.SetAccountSnapshot(D3.Account.SavedDefinition.CreateBuilder().SetVersion(905)
.SetDigest(Gaccount.Digest)
)
.SetRiftSnapshot(D3.Leaderboard.RiftSnapshot.CreateBuilder()
.SetRiftSeed(2342341)
.SetRiftTier(1)
.SetSnoDungeonFinder(1)
.SetSnoBoss(1)
.SetNumDeaths(1)
.SetCompletionMilliseconds(5000)
.SetDeprecatedCompletionSeconds(500)
.AddFloors(D3.Leaderboard.RiftFloor.CreateBuilder().SetSnoWorld(-1).SetPopulationHash(10))
)
)
//*/
.SetCheated(false)
.AddTeamMember(Memb)
));
}
catch
{
}
}
Result.SetLimit(1004).SetTotalLeaderboardEntries((uint)Result.EntryCount);
Result.SetTotalLeaderboardEntries((uint)gameAccounts.Count);
return Result.Build().ToByteString();
}
#endregion
#region Запрос списка персонажей
private ByteString OnHeroDigestListRequest(BattleClient Client, ByteString data)
{
HeroDigestListRequest request = HeroDigestListRequest.ParseFrom(data);
HeroDigestListResponse.Builder builder = HeroDigestListResponse.CreateBuilder();
foreach (var toon in request.ToonIdList)
{
builder.AddDigestList(ToonManager.GetToonByLowID(toon).Digest);
}
return builder.Build().ToByteString();
}
#endregion
#region Создание/Удаление/Переключение персонажа
private ByteString OnHeroCreateParams(BattleClient Client, ByteString data)
{
HeroCreateParams createParams = HeroCreateParams.ParseFrom(data);
//for (int i = 0; i < Client.Account.GameAccount.DBGameAccount.DBToons.Count; i++)
// if (Client.Account.GameAccount.DBGameAccount.DBToons[i].Name.ToLower() == createPrams.Name.ToLower())
// return null;
//var newToon = ToonManager.CreateNewToon(createPrams.Name, createPrams.GbidClass, createPrams.IsHardcore, createPrams.IsFemale ? 0x02 : (uint)0x00, 1, Client.Account.GameAccount, createPrams.IsSeason ? (uint)1 : (uint)0);
var newToon = ToonManager. CreateNewToon(createParams.Name, createParams.GbidClass, createParams.IsFemale ? ToonFlags.Female : ToonFlags.Male, 1, createParams.IsHardcore, Client.Account.GameAccount, createParams.IsSeason ? 1 : 0);
return CreateHeroResponse.CreateBuilder().SetHeroId(newToon.D3EntityID.IdLow).Build().ToByteString();
}
private ByteString OnHeroDeleteParams(BattleClient Client, ByteString data)
{
var DeleteParams = DeleteHero.ParseFrom(data);
var toon = ToonManager.GetToonByLowID(DeleteParams.HeroId);
ToonManager.DeleteToon(toon);
return ByteString.Empty;
}
private ByteString SwitchCharRequest(BattleClient Client, ByteString data)
{
var request = D3.GameMessage.GetToonSettings.ParseFrom(data);
var oldToon = Client.Account.GameAccount.CurrentToon;
var newtoon = ToonManager.GetToonByLowID(request.HeroId);
if (oldToon != newtoon)
{
Client.Account.GameAccount.CurrentToon = newtoon;
Client.Account.GameAccount.NotifyUpdate();
//AccountManager.SaveToDB(Client.Account);
//Client.Account.GameAccount.Setted = true;
}
var response = D3.GameMessage.SelectHero.CreateBuilder().SetHeroId(request.HeroId);
return response.Build().ToByteString();
}
#endregion
#region Инициализация логина
private ByteString OnInitialLoginDataRequest(BattleClient Client, ByteString data)
{
var req = InitialLoginDataRequest.ParseFrom(data);
InitialLoginDataQueuedResponse.Builder res = InitialLoginDataQueuedResponse.CreateBuilder();
res.SetServiceId(1)
.SetTimeoutTickInterval(2000);
return res.Build().ToByteString();
}
#endregion
#region Редактирование баннера
private bool SaveBanner(BattleClient Client, ByteString data)
{
Logger.Trace("SaveBannerConfiguration()");
//var bannerConfig = HeroDigestBanner.ParseFrom(data);
var bannerConfig = SaveBannerConfiguration.ParseFrom(data);
if (Client.Account.GameAccount.BannerConfigurationField.Value == bannerConfig.Banner)
return false;
else
{
Client.Account.GameAccount.BannerConfiguration = bannerConfig.Banner;
Client.Account.GameAccount.NotifyUpdate();
}
return true;
}
#endregion
#region Система гильдии
private ByteString CreateGuild(BattleClient Client, ByteString data)
{
GuildCreate request = GuildCreate.ParseFrom(data);
var guild = GuildManager.CreateNewGuild(Client.Account.GameAccount, request.Name, request.Tag, true, 0, request.LookingForMembers, request.Language);
if (guild != null)
{
return guild.GuildId.ToByteString();
}
else
return ByteString.Empty;
}
private ByteString SearchGuilds(BattleClient Client, ByteString data)
{
GuildSearch request = GuildSearch.ParseFrom(data);
Logger.Trace("GuildSearch(): {0}", request.ToString());
var builder = D3.Guild.GuildSearchResultList.CreateBuilder();
List<Guild> all_guilds = null;
if (request.ClanOrGroup == 1)
all_guilds = GuildManager.GetCommunities();
else
all_guilds = GuildManager.GetClans();
foreach (var guild in all_guilds)
{
if (guild.Disbanded) continue;
if (request.HasName && !guild.Name.ToLower().Contains(request.Name.ToLower())) continue;
var guild_data = D3.Guild.GuildSearchResult.CreateBuilder()
.SetGuildId(guild.PersistentId)
.SetGuildName(guild.FullName)
.SetCategory(guild.Category)
.SetRequiresInvite(guild.IsInviteRequired)
.SetTotalMembers((uint)guild.Members.Count)
.SetLastActivity(guild.NewsTime)
.SetLastOfficerActivity(guild.NewsTime)
.SetLanguage(guild.Language);
if (guild.Prefix != "")
guild_data.SetGuildTag(guild.Prefix);
builder.AddResults(guild_data);
}
return builder.Build().ToByteString();
}
private ByteString AcceptInviteToGuild(BattleClient Client, ByteString data)
{
GuildInviteResponse request = GuildInviteResponse.ParseFrom(data);
var guild = GuildManager.GetGuildById(request.GuildId);
var gameAccount = Client.Account.GameAccount;
if (guild != null)
{
if (request.Result == false)
{
gameAccount.GuildInvites.RemoveAll(i => i.GuildId == guild.PersistentId);
}
else
{
if (gameAccount.GuildInvites.Any(i => i.GuildId == guild.PersistentId) || !guild.IsClan)
{
gameAccount.GuildInvites.RemoveAll(i => i.GuildId == guild.PersistentId);
guild.AddMember(gameAccount);
}
}
}
return ByteString.Empty;
}
private void AcceptInviteToGuild(BattleClient Client, GuildInviteResponse request)
{
var guild = GuildManager.GetGuildById(request.GuildId);
var gameAccount = Client.Account.GameAccount;
if (guild != null)
{
if (request.Result == false)
{
gameAccount.GuildInvites.RemoveAll(i => i.GuildId == guild.PersistentId);
}
else
{
if (gameAccount.GuildInvites.Any(i => i.GuildId == guild.PersistentId) || !guild.IsClan)
{
gameAccount.GuildInvites.RemoveAll(i => i.GuildId == guild.PersistentId);
guild.AddMember(gameAccount);
}
}
}
}
private void GuildKickMemberP(BattleClient client, D3.GameMessage.GuildKickMember request)
{
Logger.Trace("GuildKickMember(): {0}", request.ToString());
var guild = GuildManager.GetGuildById(request.GuildId);
if (guild != null && client.Account.GameAccount.PersistentID == guild.Owner.PersistentID)
{
var gameAccount = GameAccountManager.GetAccountByPersistentID(request.MemberId);
guild.RemoveMember(gameAccount);
}
}
private void GuildDisband(BattleClient Client, D3.GameMessage.GuildId request)
{
Logger.Trace("GuildDisband(): {0}", request.ToString());
var guild = GuildManager.GetGuildById(request.GuildId_);
if (guild != null && Client.Account.GameAccount.PersistentID == guild.Owner.PersistentID)
{
guild.Disband();
}
}
private ByteString ExitFromGuild(BattleClient Client, ByteString data)
{
return ByteString.Empty;
}
private ByteString GuildFetchNews(BattleClient Client, D3.GameMessage.GuildFetchNews request)
{
Logger.Trace("GuildFetchNews(): {0}", request.ToString());
var builder = D3.Guild.NewsList.CreateBuilder();
/* news types:
0 - item looted + D3.Items.Generator
1 - achievement + D3.Guild.AchievementNews
2 - joined
3 - left
4 - promoted
5 - changed MOTD
6 - changed info
7 - changed leader
8 - manual post + D3.Guild.NewsPost
*/
var guild = GuildManager.GetGuildById(request.GuildId);
if (guild != null)
{
var guild_news = DBSessions.SessionQueryWhere<DBGuildNews>(n => n.DBGuild.Id == guild.PersistentId);
foreach (var news in guild_news)
{
if (news.Time < request.NewsTime) continue;
var post = D3.Guild.News.CreateBuilder().SetNewsId(news.Id).SetAccountId(news.DBGameAccount.Id).SetNewsType((uint)news.Type).SetNewsTime(news.Time);
if (news.Type < 2 || news.Type == 8)
post.SetNewsData(ByteString.CopyFrom(news.Data));
builder.AddNewsProp(post);
//builder.AddPosts(post);
}
return builder.Build().ToByteString();
}
else
return ByteString.Empty;
}
private ByteString GuildPromoteMember(BattleClient Сlient, D3.GameMessage.GuildPromoteMember request)
{
Logger.Trace("GuildPromoteMember(): {0}", request.ToString());
var guild = GuildManager.GetGuildById(request.GuildId);
var account = GameAccountManager.GetAccountByPersistentID(request.MemberId);
if (guild != null && guild.HasMember(account) && guild.HasMember(Сlient.Account.GameAccount))
{
guild.PromoteMember(account);
var builder = D3.Guild.Member.CreateBuilder()
.SetAccountId(account.PersistentID)
.SetRankId(guild.GetRank(account.PersistentID))
.SetNote(guild.GetMemberNote(account.PersistentID))
.SetNewsTime(guild.NewsTime)
.SetAchievementPoints(account.AchievementPoints);
return builder.Build().ToByteString();
}
else
return ByteString.Empty;
}
private ByteString GuildDemoteMember(BattleClient Сlient, D3.GameMessage.GuildDemoteMember request)
{
Logger.Trace("GuildDemoteMember(): {0}", request.ToString());
var guild = GuildManager.GetGuildById(request.GuildId);
var account = GameAccountManager.GetAccountByPersistentID(request.MemberId);
if (guild != null && guild.HasMember(account) && guild.HasMember(Сlient.Account.GameAccount))
{
guild.DemoteMember(account);
var builder = D3.Guild.Member.CreateBuilder()
.SetAccountId(account.PersistentID)
.SetRankId(guild.GetRank(account.PersistentID))
.SetNote(guild.GetMemberNote(account.PersistentID))
.SetNewsTime(guild.NewsTime)
.SetAchievementPoints(account.AchievementPoints);
return builder.Build().ToByteString();
}
else
return ByteString.Empty;
}
private ByteString InviteToGuild(BattleClient Client, ByteString data)
{
GuildInvite request = GuildInvite.ParseFrom(data);
;
var guild = GuildManager.GetGuildById(request.GuildId);
if (guild != null)
{
var gameAccount = GameAccountManager.GetAccountByPersistentID(request.InviteeId);
gameAccount.InviteToGuild(guild, Client.Account.GameAccount);
}
return ByteString.Empty;
}
private void GuildSetMOTD(BattleClient Client, D3.GameMessage.GuildSetMotd request)
{
var guild = GuildManager.GetGuildById(request.GuildId);
if (guild != null && guild.HasMember(Client.Account.GameAccount))
{
guild.MOTD = request.Motd;
var dbGuild = guild.DBGuild;
dbGuild.MOTD = request.Motd;
DBSessions.SessionUpdate(dbGuild);
guild.AddNews(Client.Account.GameAccount, 5);
}
}
private void GuildSetNews(BattleClient Client, D3.GameMessage.GuildSetNews request)
{
var guild = GuildManager.GetGuildById(request.GuildId);
if (guild != null && guild.HasMember(Client.Account.GameAccount))
{
guild.AddNews(Client.Account.GameAccount, 8, request.NewsData.ToByteArray());
}
}
private ByteString GuildInvit(BattleClient Client, ByteString data)
{
var test = GuildInvite.ParseFrom(data);
var guild = GuildManager.GetGuildById(test.GuildId);
if (guild != null)
{
var acc = AccountManager.GetAccountByBattletag(test.BattleTagOrEmail);
if (acc == null)
acc = AccountManager.GetAccountByEmail(test.BattleTagOrEmail);
var gameAccount = GameAccountManager.GetAccountByPersistentID(acc.CurrentGameAccountId);
gameAccount.InviteToGuild(guild, Client.Account.GameAccount);
}
return ByteString.Empty;
}
private ByteString GuildSuggest(BattleClient Client, D3.GameMessage.GuildSuggest request)
{
var gameAccount = GameAccountManager.GetAccountByPersistentID(request.OtherAccountId);
var guild = GuildManager.GetGuildById(request.GuildId);
if (guild != null && guild.IsLFM)
{
guild.AddSuggestion(gameAccount, Client.Account.GameAccount);
gameAccount.InviteToGuild(guild, Client.Account.GameAccount);
return D3.Guild.InviteInfo.CreateBuilder()
.SetGuildId(guild.PersistentId)
.SetGuildName(guild.Name)
.SetInviterId(Client.Account.GameAccount.PersistentID)
.SetCategory(guild.Category)
.SetInviteType(1U)
.SetExpireTime(3600).Build().ToByteString();
}
return ByteString.Empty;
}
private void GuildSetDescription(BattleClient Client, D3.GameMessage.GuildSetDescription request)
{
var guild = GuildManager.GetGuildById(request.GuildId);
if (guild != null && guild.HasMember(Client.Account.GameAccount))
{
guild.Description = request.Description;
var dbGuild = guild.DBGuild;
dbGuild.Description = request.Description;
DBSessions.SessionUpdate(dbGuild);
guild.AddNews(Client.Account.GameAccount, 6);
}
}
private void GuildSuggestionResponse(BattleClient Client, D3.GameMessage.GuildSuggestionResponse request)
{
var builder = D3.GameMessage.GuildSuggestionResponse.CreateBuilder();
var gameAccount = GameAccountManager.GetAccountByPersistentID(request.InviteeId);
var guild = GuildManager.GetGuildById(request.GuildId);
if (guild != null)
{
guild.RemoveSuggestion(gameAccount);
gameAccount.GuildInvites.RemoveAll(i => i.GuildId == guild.PersistentId);
if (request.Result == true)
gameAccount.InviteToGuild(guild, Client.Account.GameAccount);
}
}
private ByteString GetInviteList(BattleClient Client, D3.GameMessage.GuildId guild_id)
{
var builder = D3.Guild.InviteList.CreateBuilder();
var guild = GuildManager.GetGuildById(guild_id.GuildId_);
if (guild != null && guild.HasMember(Client.Account.GameAccount))
{
foreach (var invite in guild.GuildSuggestions)
builder.AddInvites(invite);
return builder.Build().ToByteString();
}
else
return ByteString.Empty;
}
private void GuildCancelInvite(BattleClient Сlient, D3.GameMessage.GuildCancelInvite request)
{
var guild = GuildManager.GetGuildById(request.GuildId);
if (guild != null)
{
var gameAccount = GameAccountManager.GetAccountByPersistentID(request.AccountId);
gameAccount.GuildInvites.RemoveAll(i => i.GuildId == guild.PersistentId);
guild.GuildSuggestions.RemoveAll(i => i.AccountId == request.AccountId);
}
}
private void GuildLFM(BattleClient client, D3.GameMessage.GuildSetLFM request)
{
var guild = GuildManager.GetGuildById(request.GuildId);
if (guild != null && guild.HasMember(client.Account.GameAccount))
{
guild.IsLFM = request.Lfm;
var dbGuild = guild.DBGuild;
dbGuild.IsLFM = request.Lfm;
DBSessions.SessionUpdate(dbGuild);
guild.UpdateChannelAttributes();
}
}
private ByteString CreateCommunity(BattleClient Client, ByteString data)
{
var request = GroupCreate.ParseFrom(data);
Logger.Trace("CreateCommunity(): {0}", request.ToString());
var guild = GuildManager.CreateNewGuild(Client.Account.GameAccount, request.Name, "", false, request.SearchCategory, false, request.Language);
if (guild != null)
{
return guild.GuildId.ToByteString();
}
else
return ByteString.Empty;
}
#endregion
#region Статистика аккаунтов
private ByteString CollectProfiles(BattleClient Client, ByteString data)
{
var request = D3.GameMessage.GetAccountProfile.ParseFrom(data);
var account = GameAccountManager.GetAccountByPersistentID(request.AccountId.Id);
if (request.SeasonId != 0)
{
return account.Profile.ToByteString(); //return account.SeasonProfile.ToByteString();
}
else
{
return account.Profile.ToByteString();
}
}
private ByteString CollectAchivementsSnapshot(BattleClient Client, ByteString data)
{
var request = D3.GameMessage.AchievementsGetSnapshot.ParseFrom(data);
var snapshot = D3.Achievements.Snapshot.CreateBuilder();
foreach (var achievement in Client.Account.GameAccount.Achievements)
{
if (achievement.AchievementId == 1)
{
/*
AchievementCriteria.Add(CriteriaUpdateRecord.CreateBuilder()
.SetCriteriaId32AndFlags8(3367569)
.SetQuantity32((uint)ach.Criteria.Count())
.Build()
);
//*/
}
snapshot.AddAchievementSnapshot(achievement);
}
foreach (var criteria in Client.Account.GameAccount.AchievementCriteria)
{
uint countofTravels = 0;
if (criteria.CriteriaId32AndFlags8 == 3367569)
countofTravels++;
snapshot.AddCriteriaSnapshot(criteria);
}
return AchievementsSnapshot.CreateBuilder().SetErrorCode(0).SetGameAccountId(request.GameAccountId).SetSnapshot(snapshot).Build().ToByteString();
}
#endregion
#region Коллекция и магазин
private ByteString GetCollectionAccout(BattleClient Client, ByteString data)
{
var C = D3.CosmeticItems.CosmeticItems.CreateBuilder();
#region Все вещи
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2431587061))); // Angelic
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2431587101))); // Aranea
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2586361111))); // Barbarian
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2350702305))); // Base Frame
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2608693639))); // Blood Shard
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2608693641))); // Blood Shard))); // Champion
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2608693643))); // Blood Shard))); // Conqueror
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2608693642))); // Blood Shard))); // Destroyer
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2608693644))); // Blood Shard))); // Guardian
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2608693640))); // Blood Shard))); // Slayer
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2431587063))); // Bone
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2431587102))); // Caldeum
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)789315589))); // Call to Adventure
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)789315590))); // Call to Adventure))); // Slayer
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)789315591))); // Call to Adventure))); // Champion
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)789315593))); // Call to Adventure))); // Conqueror
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)789315592))); // Call to Adventure))); // Destroyer
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)789315594))); // Call to Adventure))); // Guardian
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)3111787208))); // Classic Angel
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)3115028404))); // Classic Demon
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1666320302))); // Crusader
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2431587062))); // Deathshead
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1834718654))); // Demon Hunter
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)949147387))); // Eternal Conflict
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)949147388))); // Eternal Conflict))); // Slayer
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)949147389))); // Eternal Conflict))); // Champion
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)949147391))); // Eternal Conflict))); // Conqueror
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)949147390))); // Eternal Conflict))); // Destroyer
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)949147392))); // Eternal Conflict))); // Guardian
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)466824271))); // Eternal Woods
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)466824272))); // Eternal Woods))); // Slayer
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)466824273))); // Eternal Woods))); // Champion
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)466824275))); // Eternal Woods))); // Conqueror
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)466824274))); // Eternal Woods))); // Destroyer
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)466824276))); // Eternal Woods))); // Guardian
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2914281823))); // Greyhollow
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2914281824))); // Greyhollow))); // Slayer
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2914281825))); // Greyhollow))); // Champion
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2914281827))); // Greyhollow))); // Conqueror
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2914281826))); // Greyhollow))); // Destroyer
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2914281828))); // Greyhollow))); // Guardian
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2431587099))); // Heart of Darkness
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)409592463))); // Heaven
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)409592464))); // Heaven))); // Slayer
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)409592465))); // Heaven))); // Champion
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)409592467))); // Heaven))); // Conqueror
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)409592466))); // Heaven))); // Destroyer
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)409592468))); // Heaven))); // Guardian
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)586020310))); // Hell
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)586020311))); // Hell))); // Slayer
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)586020312))); // Hell))); // Champion
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)586020313))); // Hell))); // Destroyer
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)586020314))); // Hell))); // Conqueror
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)586020315))); // Hell))); // Guardian
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2174954790))); // Imperius
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2174954791))); // Imperius))); // Slayer
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2174954792))); // Imperius))); // Champion
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2174954794))); // Imperius))); // Conqueror
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2174954793))); // Imperius))); // Destroyer
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2174954795))); // Imperius))); // Guardian
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)4111980878))); // Industrial
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2431587128))); // Jade Serpent
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2431587066))); // Molten
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)423580970))); // Monk
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1094085036))); // Necromancer
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)604200072))); // Overwatch
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2129557709))); // Pandemonium
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2129557710))); // Pandemonium))); // Slayer
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2129557711))); // Pandemonium))); // Champion
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2129557713))); // Pandemonium))); // Conqueror
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2129557712))); // Pandemonium))); // Destroyer
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2129557714))); // Pandemonium))); // Guardian
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2350702306))); // Paragon 1
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)263764818))); // Paragon 10
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)114304450))); // Paragon 100
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)263764851))); // Paragon 20
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)114305539))); // Paragon 200
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)263764884))); // Paragon 30
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)114306628))); // Paragon 300
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)263764917))); // Paragon 40
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)114307717))); // Paragon 400
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)263764950))); // Paragon 50
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)114308806))); // Paragon 500
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)263764983))); // Paragon 60
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)114309895))); // Paragon 600
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)263765016))); // Paragon 70
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)114310984))); // Paragon 700
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)263765049))); // Paragon 80
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)114312073))); // Paragon 800
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)263765082))); // Paragon 90
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1103438361))); // Portrait of Valor
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2431587097))); // Season 3
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2914245886))); // Season 4
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2914245888))); // Season 4))); // Champion
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2914245890))); // Season 4))); // Conqueror
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2914245889))); // Season 4))); // Destroyer
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2914245891))); // Season 4))); // Guardian
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2914245887))); // Season 4))); // Slayer
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2431587127))); // Sescheron
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)360887075))); // Soulstone
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)360887077))); // Soulstone))); // Champion
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)360887079))); // Soulstone))); // Conqueror
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)360887078))); // Soulstone))); // Destroyer
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)360887080))); // Soulstone))); // Guardian
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)360887076))); // Soulstone))); // Slayer
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2431587068))); // Stained Glass))); // Azure
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2431587094))); // Stained Glass))); // Orange
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2431587095))); // Stained Glass))); // Purple
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2431587069))); // Stained Glass))); // Red
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2431587067))); // Stained Glass))); // Teal
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2431587093))); // Stained Glass))); // Yellow
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2431587098))); // Storm
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1898911879))); // Tal Rasha
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1898911880))); // Tal Rasha))); // Slayer
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1898911881))); // Tal Rasha))); // Champion
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1898911883))); // Tal Rasha))); // Conqueror
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1898911882))); // Tal Rasha))); // Destroyer
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1898911884))); // Tal Rasha))); // Guardian
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1079851844))); // Teganze Warrior
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2431587126))); // The Sign of Rakkis
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2431587064))); // Thorns
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)3661137118))); // Treasure Goblin
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)3661137119))); // Treasure Goblin))); // Slayer
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)3661137120))); // Treasure Goblin))); // Champion
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)3661137122))); // Treasure Goblin))); // Conqueror
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)3661137121))); // Treasure Goblin))); // Destroyer
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)3661137123))); // Treasure Goblin))); // Guardian
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)4140821779))); // Triforce
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2001444264))); // Twitch
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2431587100))); // Viper's Seal
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2431587096))); // Whimsyshire Portrait Frame
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2819867039))); // Witch Doctor
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2102838278))); // Wizard
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)3526887646))); // Zandalari
//Pets
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2923223637))); // Bat
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)567166426))); // Angelic Goblin
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)3358761128))); // Az-Lo
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)3620943091))); // Belphegor
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)291388178))); // Bile Boy
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2767458423))); // Blaine's Bear
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1336361309))); // Blaze
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)988742338))); // Bones
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)291388177))); // Buddy
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)167459531))); // Butcher
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1497375554))); // Captain Maraca
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1209305989))); // Charlotte
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)937125523))); // Cucco
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1369935753))); // Diablo
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)3922872439))); // Dominion's Revenge
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)471039389))); // Dream of Piers
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1404174869))); // Emerald Serpent
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)3620943090))); // Friendly Gauntlet
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)291388175))); // Frost Hound
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2327409917))); // Galthrak the Unhinged
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)3153829279))); // Garluth, Destroyer of Kneecaps
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)909568905))); // Grunkk
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)3258626648))); // Half-formed Golem
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)4084520547))); // Haunting Hannah
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1336361310))); // Humbart Wessel
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1404174868))); // Iron Serpent
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1404174867))); // Jade Serpent
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)3620943089))); // Knight Hand
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1508058349))); // Lady Morthanlu
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1967180567))); // Lamb
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)3132731524))); // Liv Moore
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2767458419))); // Lord Kek La Mort
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1508058348))); // Lord Nedly
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)347688656))); // Malfeasance
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1514497706))); // Mal'Ganis
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1377380860))); // Minaca the Feared
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2767458418))); // Mr. Bear
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)3430307999))); // Ms. Madeleine
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2401672920))); // Murkgoblin
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)3870322527))); // Old Growth
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2767458421))); // Overseer Lady Josephine
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)517654224))); // Probe
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)3094528011))); // Queen of the Succubi
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1168709051))); // Rocky
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1729774130))); // Royal Calf
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)3919201454))); // Shadow Diablo
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)291388174))); // Spike
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2431587065))); // Steadfast
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1920516661))); // Stupendous Contraption
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)3536793764))); // Tal'darim Probe
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2647152737))); // Ten Pounder
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2768450096))); // That Which Must Not be Named
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)291388179))); // The Black Dog
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)3475456761))); // The Bumble
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)95923716))); // The Stomach
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)291388176))); // Tiger Hound
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)471039390))); // Unihorn
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2767458422))); // Xiansai Bear
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)3620943088))); // Zayl's Loss
//Wings
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)3372877841))); // Knights of Westmarch
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1464422747))); // Blade Wings
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)567892925))); // Anguish's Grasp
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2222542490))); // Auriel's Favor
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)702834904))); // Blue Horror
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)702834901))); // Brimstone Ascendant
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1905890384))); // Cosmic Wings
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)702834903))); // Dark Bat
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1464422100))); // Demon Soaring
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)702834905))); // Dread
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2653514096))); // Echoes of the Mask
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)208405024))); // Eldritch Embrace
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)3890992984))); // Embrace of the Pure One
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1464439640))); // Eternal Flame
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1081301157))); // Eternal Light
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1081297790))); // Falcon's Wings
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)550271606))); // Fiacla-Géar
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)262300867))); // Fingers of Flame
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2479192435))); // Fingers of Terror
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)546207131))); // Galactic
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)211305012))); // Harbinger of Destruction
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1905890379))); // Lady Gaki's Wings
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)3273442495))); // Lilith's Embrace
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1905890378))); // Lord Culsu's Wings
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1335990173))); // Mercy's Gaze
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)702834906))); // Osseous Grasp
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)208454467))); // Pieces of Hatred
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2552747379))); // Prime Evil Wings
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2764892181))); // Skeletal Wings
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2029657407))); // Star Wings
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)702834902))); // Sulfuric Tide
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2840660586))); // The Light of Heaven
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)3297867693))); // The Mimic
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2222725144))); // The Pillars of Heaven
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)721772994))); // Trag'Oul Wings
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1905890383))); // Winds of Aldinach
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1905890380))); // Wings of Kokabiel
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1905890381))); // Wings of Lempo
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2036418836))); // Wings of Mastery
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)550271607))); // Wings of Northern Skies
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1905890382))); // Wings of Semyaz
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1185806158))); // Wings of Terror
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2590476058))); // Wings of the Betrayer
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)726768249))); // Wings of the Crypt Guardian
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)671128753))); // Wings of the Dedicated
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)4188235898))); // Wings of the Ghost Queen
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1030142027))); // Wings of Valor
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2015178386))); // Heaven's Might
//1514497706
//Флаги
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1428615110))); // Barbarian
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)895083523))); // Barbarian Ascendant
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)3194995136))); // BlizzCon 2015
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)3484863475))); // Blood Master
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)522011784))); // Crusader
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)938178597))); // Crusader Ascendant
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)566077307))); // Demon Hunter
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)28429688))); // Demon Hunter Ascendant
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)177825848))); // Diablo
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)177825849))); // Diablo II
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)177825850))); // Diablo III
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2113242414))); // Dog
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)218434287))); // Dragon
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)590649887))); // Goat
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)4211285172))); // Harvest
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)127020830))); // Heroes of the Storm
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2644729685))); // Horse
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)177825852))); // Lord of Destruction
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1156357301))); // Loremaster
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)3269693700))); // Monk
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)895493953))); // Monk Ascendant
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1375359175))); // Monkey
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)3829241798))); // Necromancer
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)671111717))); // Necromancer Ascendant
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1769352763))); // Ox
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2575751604))); // Pig
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)4233838312))); // Rabbit
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2645002203))); // Rat
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)177825851))); // Reaper of Souls
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)455845058))); // Rooster
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)3124785508))); // Samhain
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2732665546))); // Season 3
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1329910150))); // Snake
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)3359438927))); // Tiger
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2885511819))); // Tyrael's Justice
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)3532272868))); // Warsong Pennant
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)2626988266))); // Witch Doctor
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)28430311))); // Witch Doctor Ascendant
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)1114884937))); // Wizard
C.AddCosmeticItems_(D3.CosmeticItems.CosmeticItem.CreateBuilder().SetGbid(unchecked((int)938200550))); // Wizard Ascendant
//*/
#endregion
return C.Build().ToByteString();
}
private ByteString CurrentPrimaryWallet(BattleClient Client, ByteString data)
{
var test = D3.Store.GetPrimaryCurrency.ParseFrom(data);
var testresp = D3.Store.GetPrimaryCurrencyResponse.CreateBuilder().SetCurrency(3600);
var test1 = D3.Store.GetPaymentMethods.ParseFrom(data);
var testresp2 = D3.Store.GetPaymentMethodsResponse.CreateBuilder()
.AddWallets(D3.Store.Wallet.CreateBuilder().SetPrimary(true).SetWalletId(840).SetWalletName("US Dollar").SetFixedPointBalance(50))
//.AddWallets(D3.Store.Wallet.CreateBuilder().SetPrimary(true).SetWalletId(826).SetWalletName("Pound Streling").SetFixedPointBalance(50))
;
/*
.AddCurrencies(D3.Store.Currency.CreateBuilder().SetCode("GBP").SetId(826).SetSymbol("GBP").SetName("Pound Sterling"))
.AddCurrencies(D3.Store.Currency.CreateBuilder().SetCode("NZD").SetId(554).SetSymbol("NZD").SetName("New Zealand Dollar"))
.AddCurrencies(D3.Store.Currency.CreateBuilder().SetCode("CLP").SetId(152).SetSymbol("CLP").SetName("Chilean Peso"))
.AddCurrencies(D3.Store.Currency.CreateBuilder().SetCode("TPT").SetId(16).SetSymbol("NT$").SetName("TPT"))
.AddCurrencies(D3.Store.Currency.CreateBuilder().SetCode("CAD").SetId(124).SetSymbol("CAD").SetName("Canadian Dollar"))
.AddCurrencies(D3.Store.Currency.CreateBuilder().SetCode("KRW").SetId(410).SetSymbol("KRW").SetName("Won"))
.AddCurrencies(D3.Store.Currency.CreateBuilder().SetCode("USD").SetId(840).SetSymbol("USD").SetName("US Dollar"))
.AddCurrencies(D3.Store.Currency.CreateBuilder().SetCode("JPY").SetId(392).SetSymbol("JPY").SetName("Yen"))
.AddCurrencies(D3.Store.Currency.CreateBuilder().SetCode("MXN").SetId(484).SetSymbol("MXN").SetName("Mexican Peso"))
.AddCurrencies(D3.Store.Currency.CreateBuilder().SetCode("BRL").SetId(986).SetSymbol("BRL").SetName("Brazilian Real"))
.AddCurrencies(D3.Store.Currency.CreateBuilder().SetCode("AUD").SetId(36).SetSymbol("AUD").SetName("Australian Dollar"))
.AddCurrencies(D3.Store.Currency.CreateBuilder().SetCode("CAD").SetId(124).SetSymbol("CAD").SetName("Canadian Dollar"))
.AddCurrencies(D3.Store.Currency.CreateBuilder().SetCode("EUR").SetId(978).SetSymbol("EUR").SetName("Euro"))
.AddCurrencies(D3.Store.Currency.CreateBuilder().SetCode("ARS").SetId(32).SetSymbol("ARS").SetName("Argentine Peso"))
.AddCurrencies(D3.Store.Currency.CreateBuilder().SetCode("RUB").SetId(643).SetSymbol("RUB").SetName("Russian Ruble"))
.AddCurrencies(D3.Store.Currency.CreateBuilder().SetCode("CPT").SetId(15).SetSymbol("¥").SetName("CPT"))
.AddCurrencies(D3.Store.Currency.CreateBuilder().SetCode("XDC").SetId(26).SetSymbol("$").SetName("D3 Platinum"))
//*/
return testresp2.Build().ToByteString();
}
private ByteString CurrentWallet(BattleClient Client, ByteString data)
{
var test = D3.Store.GetPaymentMethods.ParseFrom(data);
var request = D3.Store.GetCurrency.ParseFrom(data);
var testresp = D3.Store.GetPrimaryCurrencyResponse.CreateBuilder().SetCurrency(3600);
return testresp.Build().ToByteString();
}
private ByteString CurrentStore(BattleClient Client, ByteString data)
{
var test = D3.Store.GetProductCategories.ParseFrom(data);
var responseCategoriese = D3.Store.GetProductCategoriesResponse.CreateBuilder();
responseCategoriese.AddCategories(D3.Store.ProductCategory.CreateBuilder().SetCategory(0).SetNewestProductTime(0x6E1199DE92C0000)); //Популярное
//responseCategoriese.AddCategories(D3.Store.ProductCategory.CreateBuilder().SetCategory(1).SetNewestProductTime(0)); //Платина
//responseCategoriese.AddCategories(D3.Store.ProductCategory.CreateBuilder().SetCategory(2).SetNewestProductTime(0)); //?
//responseCategoriese.AddCategories(D3.Store.ProductCategory.CreateBuilder().SetCategory(3).SetNewestProductTime(0)); //Дополнение
//responseCategoriese.AddCategories(D3.Store.ProductCategory.CreateBuilder().SetCategory(4).SetNewestProductTime(0x72A0D8B7AD90000)); //Некромант
//responseCategoriese.AddCategories(D3.Store.ProductCategory.CreateBuilder().SetCategory(5).SetNewestProductTime(0)); //?
//responseCategoriese.AddCategories(D3.Store.ProductCategory.CreateBuilder().SetCategory(6).SetNewestProductTime(0)); //?
//responseCategoriese.AddCategories(D3.Store.ProductCategory.CreateBuilder().SetCategory(7).SetNewestProductTime(0)); //Элитные комплекты
//responseCategoriese.AddCategories(D3.Store.ProductCategory.CreateBuilder().SetCategory(8).SetNewestProductTime(0)); //Крестоносец
//responseCategoriese.AddCategories(D3.Store.ProductCategory.CreateBuilder().SetCategory(9).SetNewestProductTime(0)); //Пропуск искателя приключений
responseCategoriese.AddCategories(D3.Store.ProductCategory.CreateBuilder().SetCategory(10).SetNewestProductTime(0x72A0D8B7AD90000));//Крылья
responseCategoriese.AddCategories(D3.Store.ProductCategory.CreateBuilder().SetCategory(11).SetNewestProductTime(0x725C16B88870000));//Питомцы
responseCategoriese.AddCategories(D3.Store.ProductCategory.CreateBuilder().SetCategory(12).SetNewestProductTime(0));//Рамки
responseCategoriese.AddCategories(D3.Store.ProductCategory.CreateBuilder().SetCategory(13).SetNewestProductTime(0));//Флаги
responseCategoriese.AddCategories(D3.Store.ProductCategory.CreateBuilder().SetCategory(14).SetNewestProductTime(0));//Усиление Героя
responseCategoriese.AddCategories(D3.Store.ProductCategory.CreateBuilder().SetCategory(15).SetNewestProductTime(0));//Ячейки Героев
responseCategoriese.AddCategories(D3.Store.ProductCategory.CreateBuilder().SetCategory(16).SetNewestProductTime(0));//Вкладки Тайника
return responseCategoriese.Build().ToByteString();
}
private ByteString CurrentStore1(BattleClient Client, ByteString data)
{
var request = D3.Store.GetProductList.ParseFrom(data);
var store = D3.Store.GetProductListResponse.CreateBuilder();
if (request.Category == 0)
{
store
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(unchecked((int)2036418836))) // Wings of Mastery
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(50000000).SetFixedPointRetailPrice(50000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(10).SetFeatured(0).SetBundleLabel("")
.SetProductId(4))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(unchecked((int)3194995136))) // Blizzcon 2015
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(15000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(13).SetFeatured(1).SetBundleLabel("")
.SetProductId(130002))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(unchecked((int)1514497706))) // MalGanis
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(70000000).SetFixedPointRetailPrice(80000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(11).SetFeatured(2).SetBundleLabel("")
.SetProductId(11000))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(unchecked((int)2431587061))) // Angelic
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(2000000).SetFixedPointRetailPrice(5000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(12).SetFeatured(3).SetBundleLabel("")
.SetProductId(12000))
;
}
#region Платина
if (request.Category == 1)
{
store
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetPlatinumAmount(500))
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(15).SetFixedPointCost(50000).SetFixedPointRetailPrice(50000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(1).SetFeatured(0).SetBundleLabel("")
.SetProductId(11383))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetPlatinumAmount(1000))
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(15).SetFixedPointCost(80000).SetFixedPointRetailPrice(80000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(1).SetFeatured(1).SetBundleLabel("")
.SetProductId(11384))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetPlatinumAmount(5000))
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(15).SetFixedPointCost(299900).SetFixedPointRetailPrice(350000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(1).SetFeatured(1).SetBundleLabel("")
.SetProductId(11385))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetPlatinumAmount(10000))
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(15).SetFixedPointCost(499900).SetFixedPointRetailPrice(499900)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(1).SetFeatured(1).SetBundleLabel("")
.SetProductId(11386))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetPlatinumAmount(50000))
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(15).SetFixedPointCost(0).SetFixedPointRetailPrice(990000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(1).SetFeatured(1).SetBundleLabel("")
.SetProductId(11387))
;
}
#endregion
#region Крылья
if (request.Category == 10)
{
store
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(1905890383))
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(20000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(10).SetFeatured(0).SetBundleLabel("")
.SetProductId(1))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(1905890380))
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(20000000).SetFixedPointRetailPrice(20000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(10).SetFeatured(0).SetBundleLabel("")
.SetProductId(2))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(1905890381))
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(20000000).SetFixedPointRetailPrice(20000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(10).SetFeatured(0).SetBundleLabel("")
.SetProductId(3))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(2036418836)) // Wings of Mastery
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(50000000).SetFixedPointRetailPrice(50000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(10).SetFeatured(0).SetBundleLabel("")
.SetProductId(4))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(550271607))
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(20000000).SetFixedPointRetailPrice(20000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(10).SetFeatured(0).SetBundleLabel("")
.SetProductId(5))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(1185806158))
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(20000000).SetFixedPointRetailPrice(20000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(1).SetFeatured(0).SetBundleLabel("")
.SetProductId(6))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(unchecked((int)2590476058)))
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(20000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(10).SetFeatured(0).SetBundleLabel("")
.SetProductId(7))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(671128753))
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(20000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(10).SetFeatured(0).SetBundleLabel("")
.SetProductId(8))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(unchecked((int)4188235898)))
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(20000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(10).SetFeatured(0).SetBundleLabel("")
.SetProductId(9))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(unchecked((int)1030142027)))
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(20000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(10).SetFeatured(0).SetBundleLabel("")
.SetProductId(10))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(721772994))
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(20000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(10).SetFeatured(0).SetBundleLabel("")
.SetProductId(11))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(567892925))
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(20000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(10).SetFeatured(0).SetBundleLabel("")
.SetProductId(12))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(1464422747))
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(20000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(10).SetFeatured(0).SetBundleLabel("")
.SetProductId(13))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(1905890384))
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(20000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(10).SetFeatured(0).SetBundleLabel("")
.SetProductId(14))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(1081297790))
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(20000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(10).SetFeatured(0).SetBundleLabel("")
.SetProductId(15))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(1905890379))
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(20000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(10).SetFeatured(0).SetBundleLabel("")
.SetProductId(16))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(1905890378))
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(20000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(10).SetFeatured(0).SetBundleLabel("")
.SetProductId(17))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(unchecked((int)2764892181)))
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(20000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(10).SetFeatured(0).SetBundleLabel("")
.SetProductId(18))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(2029657407))
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(20000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(10).SetFeatured(0).SetBundleLabel("")
.SetProductId(19))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(721772994))
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(20000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(10).SetFeatured(0).SetBundleLabel("")
.SetProductId(20));
}
#endregion
#region Питомцы
if (request.Category == 11)
{
store
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(unchecked((int)1514497706))) // MalGanis
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(70000000).SetFixedPointRetailPrice(80000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(11).SetBundleLabel("")
.SetProductId(11000));
}
#endregion
#region Рамки
if (request.Category == 12)
{
store
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(unchecked((int)2431587061))) // Angelic
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(2000000).SetFixedPointRetailPrice(5000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(12).SetBundleLabel("")
.SetProductId(12000))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(unchecked((int)604200072))) // OverWatch
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(3000000).SetFixedPointRetailPrice(5000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(12).SetBundleLabel("")
.SetProductId(12001))
;
}
#endregion
#region Флаги
if (request.Category == 13)
{
store
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(1428615110)) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(15000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(13).SetFeatured(0).SetBundleLabel("")
.SetProductId(130000))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(895083523)) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(15000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(13).SetFeatured(0).SetBundleLabel("")
.SetProductId(130001))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(unchecked((int)3194995136))) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(15000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(13).SetFeatured(0).SetBundleLabel("")
.SetProductId(130002))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(unchecked((int)3484863475))) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(15000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(13).SetFeatured(0).SetBundleLabel("")
.SetProductId(130003))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(522011784)) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(15000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(13).SetFeatured(0).SetBundleLabel("")
.SetProductId(130004))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(938178597)) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(15000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(13).SetFeatured(0).SetBundleLabel("")
.SetProductId(130005))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(566077307)) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(15000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(13).SetFeatured(0).SetBundleLabel("")
.SetProductId(130006))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(28429688)) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(15000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(13).SetFeatured(0).SetBundleLabel("")
.SetProductId(130007))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(177825848)) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(15000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(13).SetFeatured(0).SetBundleLabel("")
.SetProductId(130008))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(177825849)) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(15000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(13).SetFeatured(0).SetBundleLabel("")
.SetProductId(130009))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(177825850)) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(15000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(13).SetFeatured(0).SetBundleLabel("")
.SetProductId(130010))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(2113242414)) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(15000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(13).SetFeatured(0).SetBundleLabel("")
.SetProductId(130011))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(218434287)) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(15000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(13).SetFeatured(0).SetBundleLabel("")
.SetProductId(130012))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(590649887)) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(15000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(13).SetFeatured(0).SetBundleLabel("")
.SetProductId(130013))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(895083523)) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(15000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(13).SetFeatured(0).SetBundleLabel("")
.SetProductId(130014))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(unchecked((int)4211285172))) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(15000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(13).SetFeatured(0).SetBundleLabel("")
.SetProductId(130015))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(127020830)) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(15000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(13).SetFeatured(0).SetBundleLabel("")
.SetProductId(130016))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(unchecked((int)2644729685))) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(15000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(13).SetFeatured(0).SetBundleLabel("")
.SetProductId(130017))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(177825852)) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(15000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(13).SetFeatured(0).SetBundleLabel("")
.SetProductId(130018))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(1156357301)) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(15000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(13).SetFeatured(0).SetBundleLabel("")
.SetProductId(130019))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(unchecked((int)3269693700))) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(15000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(13).SetFeatured(0).SetBundleLabel("")
.SetProductId(130020))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(895493953)) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(15000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(13).SetFeatured(0).SetBundleLabel("")
.SetProductId(130021))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(1375359175)) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(15000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(13).SetFeatured(0).SetBundleLabel("")
.SetProductId(130022))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(unchecked((int)3269693700))) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(15000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(13).SetFeatured(0).SetBundleLabel("")
.SetProductId(130023))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(unchecked((int)3829241798))) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(15000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(13).SetFeatured(0).SetBundleLabel("")
.SetProductId(130024))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(unchecked((int)671111717))) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(15000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(13).SetFeatured(0).SetBundleLabel("")
.SetProductId(130025))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(unchecked((int)1769352763))) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(15000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(13).SetFeatured(0).SetBundleLabel("")
.SetProductId(130026))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(unchecked((int)2575751604))) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(15000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(13).SetFeatured(0).SetBundleLabel("")
.SetProductId(130027))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(unchecked((int)4233838312))) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(15000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(13).SetFeatured(0).SetBundleLabel("")
.SetProductId(130028))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(unchecked((int)2645002203))) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(15000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(13).SetFeatured(0).SetBundleLabel("")
.SetProductId(130029))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(unchecked((int)177825851))) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(15000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(13).SetFeatured(0).SetBundleLabel("")
.SetProductId(130030))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(unchecked((int)455845058))) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(15000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(13).SetFeatured(0).SetBundleLabel("")
.SetProductId(130031))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(unchecked((int)3124785508))) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(15000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(13).SetFeatured(0).SetBundleLabel("")
.SetProductId(130032))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(unchecked((int)2732665546))) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(15000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(13).SetFeatured(0).SetBundleLabel("")
.SetProductId(130033))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(unchecked((int)1329910150))) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(15000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(13).SetFeatured(0).SetBundleLabel("")
.SetProductId(130034))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(unchecked((int)3359438927))) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(15000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(13).SetFeatured(0).SetBundleLabel("")
.SetProductId(130035))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(unchecked((int)2885511819))) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(15000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(13).SetFeatured(0).SetBundleLabel("")
.SetProductId(130036))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(unchecked((int)3532272868))) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(15000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(13).SetFeatured(0).SetBundleLabel("")
.SetProductId(130037))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(unchecked((int)2626988266))) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(15000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(13).SetFeatured(0).SetBundleLabel("")
.SetProductId(130038))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(unchecked((int)28430311))) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(15000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(13).SetFeatured(0).SetBundleLabel("")
.SetProductId(130039))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(unchecked((int)1114884937))) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(15000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(13).SetFeatured(0).SetBundleLabel("")
.SetProductId(130040))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(unchecked((int)938200550))) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000).SetFixedPointRetailPrice(15000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(13).SetFeatured(0).SetBundleLabel("")
.SetProductId(130041))
;
}
#endregion
#region Бусты
if (request.Category == 14)
{
store
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetContentLicenseId(16)) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(60000000).SetFixedPointRetailPrice(60000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(14).SetDurationSecs(2592000)
.SetProductId(12101))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetContentLicenseId(16)) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(0).SetFixedPointRetailPrice(20000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(14).SetDurationSecs(604800)
.SetProductId(12102))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetContentLicenseId(17)) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(60000000).SetFixedPointRetailPrice(60000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(14).SetDurationSecs(2592000)
.SetProductId(12103))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetContentLicenseId(17)) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(20000000).SetFixedPointRetailPrice(20000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(14).SetDurationSecs(604800)
.SetProductId(12104))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetContentLicenseId(18)) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(60000000).SetFixedPointRetailPrice(60000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(14).SetDurationSecs(2592000)
.SetProductId(12105))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetContentLicenseId(18)) //
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(20000000).SetFixedPointRetailPrice(20000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(14).SetDurationSecs(604800)
.SetProductId(12106))
;
}
#endregion
#region Ячейки героев
if (request.Category == 15)
{
store
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetContentLicenseId(11).SetMaxStackCount(10))
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(100000000).SetFixedPointRetailPrice(100000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(15)
.SetProductId(15000))
;
}
#endregion
#region Вкладки тайника
if (request.Category == 16)
{
store
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetContentLicenseId(14).SetMaxStackCount(5)).AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetPlatinumAmount(0))
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(20000000).SetFixedPointRetailPrice(20000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(16)
.AddMaxContentlicensesAllowed(D3.Store.ContentLicenseRestriction.CreateBuilder().SetContentLicenseId(14).SetCount(0))
.SetProductId(160))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetContentLicenseId(14).SetMaxStackCount(5))
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(40000000).SetFixedPointRetailPrice(40000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(16)
.AddMaxContentlicensesAllowed(D3.Store.ContentLicenseRestriction.CreateBuilder().SetContentLicenseId(14).SetCount(1))
.AddMinContentlicensesRequired(D3.Store.ContentLicenseRestriction.CreateBuilder().SetContentLicenseId(14).SetCount(1))
.SetProductId(161))
.AddProducts(D3.Store.Product.CreateBuilder().AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetContentLicenseId(14).SetMaxStackCount(5))
.AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(80000000).SetFixedPointRetailPrice(80000000)) //Тип стоимости, скидочная цена, обычная цена
.SetCategory(16)
.AddMinContentlicensesRequired(D3.Store.ContentLicenseRestriction.CreateBuilder().SetContentLicenseId(14).SetCount(2))
.SetProductId(162))
;
}
#endregion
//Валюты
store
.AddCurrencies(D3.Store.Currency.CreateBuilder().SetCode("GBP").SetId(826).SetSymbol("GBP").SetName("Pound Sterling"))
.AddCurrencies(D3.Store.Currency.CreateBuilder().SetCode("NZD").SetId(554).SetSymbol("NZD").SetName("New Zealand Dollar"))
.AddCurrencies(D3.Store.Currency.CreateBuilder().SetCode("CLP").SetId(152).SetSymbol("CLP").SetName("Chilean Peso"))
.AddCurrencies(D3.Store.Currency.CreateBuilder().SetCode("TPT").SetId(16).SetSymbol("NT$").SetName("TPT"))
.AddCurrencies(D3.Store.Currency.CreateBuilder().SetCode("CAD").SetId(124).SetSymbol("CAD").SetName("Canadian Dollar"))
.AddCurrencies(D3.Store.Currency.CreateBuilder().SetCode("KRW").SetId(410).SetSymbol("KRW").SetName("Won"))
.AddCurrencies(D3.Store.Currency.CreateBuilder().SetCode("USD").SetId(840).SetSymbol("USD").SetName("US Dollar"))
.AddCurrencies(D3.Store.Currency.CreateBuilder().SetCode("JPY").SetId(392).SetSymbol("JPY").SetName("Yen"))
.AddCurrencies(D3.Store.Currency.CreateBuilder().SetCode("MXN").SetId(484).SetSymbol("MXN").SetName("Mexican Peso"))
.AddCurrencies(D3.Store.Currency.CreateBuilder().SetCode("BRL").SetId(986).SetSymbol("BRL").SetName("Brazilian Real"))
.AddCurrencies(D3.Store.Currency.CreateBuilder().SetCode("AUD").SetId(36).SetSymbol("AUD").SetName("Australian Dollar"))
.AddCurrencies(D3.Store.Currency.CreateBuilder().SetCode("CAD").SetId(124).SetSymbol("CAD").SetName("Canadian Dollar"))
.AddCurrencies(D3.Store.Currency.CreateBuilder().SetCode("EUR").SetId(978).SetSymbol("EUR").SetName("Euro"))
.AddCurrencies(D3.Store.Currency.CreateBuilder().SetCode("ARS").SetId(32).SetSymbol("ARS").SetName("Argentine Peso"))
.AddCurrencies(D3.Store.Currency.CreateBuilder().SetCode("RUB").SetId(643).SetSymbol("RUB").SetName("Russian Ruble"))
.AddCurrencies(D3.Store.Currency.CreateBuilder().SetCode("CPT").SetId(15).SetSymbol("¥").SetName("CPT"))
.AddCurrencies(D3.Store.Currency.CreateBuilder().SetCode("XDC").SetId(26).SetSymbol("$").SetName("D3 Platinum"))
;
return store.Build().ToByteString();
}
private ByteString SetCollection(BattleClient Client, ByteString data)
{
var request = D3.GameMessage.EquipCosmeticItem.ParseFrom(data);
switch (request.CosmeticItemType)
{
case 1:
Client.Account.GameAccount.CurrentToon.Cosmetic1 = request.Gbid;
break;
case 2:
Client.Account.GameAccount.CurrentToon.Cosmetic2 = request.Gbid;
break;
case 3:
Client.Account.GameAccount.CurrentToon.Cosmetic3 = request.Gbid;
break;
case 4:
Client.Account.GameAccount.CurrentToon.Cosmetic4 = request.Gbid;
break;
}
var RangeCosmetic = new[]
{
D3.Hero.VisualCosmeticItem.CreateBuilder().SetGbid(Client.Account.GameAccount.CurrentToon.Cosmetic1).Build(), // Wings
D3.Hero.VisualCosmeticItem.CreateBuilder().SetGbid(Client.Account.GameAccount.CurrentToon.Cosmetic2).Build(), // Flag
D3.Hero.VisualCosmeticItem.CreateBuilder().SetGbid(Client.Account.GameAccount.CurrentToon.Cosmetic3).Build(), // Pet
D3.Hero.VisualCosmeticItem.CreateBuilder().SetGbid(Client.Account.GameAccount.CurrentToon.Cosmetic4).Build(), // Frame
};
Client.Account.GameAccount.CurrentToon.StateChanged();
var NewVisual = D3.Hero.VisualEquipment.CreateBuilder()
.AddRangeVisualItem(Client.Account.GameAccount.CurrentToon.HeroVisualEquipmentField.Value.VisualItemList).AddRangeCosmeticItem(RangeCosmetic).Build();
Client.Account.GameAccount.CurrentToon.HeroVisualEquipmentField.Value = NewVisual;
Client.Account.GameAccount.ChangedFields.SetPresenceFieldValue(Client.Account.GameAccount.CurrentToon.HeroVisualEquipmentField);
Client.Account.GameAccount.NotifyUpdate();
return NewVisual.ToByteString();
}
private ByteString StoreRequest(BattleClient Client, ByteString data)
{
var req = GetHeroIds.ParseFrom(data);
var Status = CheatModifyStoreState.CreateBuilder().SetEnable(false);
return Status.Build().ToByteString();
}
private ByteString TestRequest(BattleClient Client, ByteString data)
{
var req = CSPullSnapshot.ParseFrom(data);
var HeroDigestList = D3.Hero.DigestList.CreateBuilder();
foreach (Toon t in Client.Account.GameAccount.Toons) HeroDigestList.AddDigests(t.Digest);
var Snap = D3.CS.HeroesList.CreateBuilder().SetCurrentSeasonNum(1).SetCurrentSeasonState(1).SetDigests(HeroDigestList);
return Snap.Build().ToByteString();
}
#endregion
#region Изменение параметров сессии
private ByteString SwitchParametrs(BattleClient Client, ByteString data)
{
var request = D3.GameMessage.MatchmakingGetStats.ParseFrom(data);
var back = GamesSystem.GameFactoryManager.GetStatsBucketWithFilter(request);
var response = MatchmakingGetStatsResponse.CreateBuilder().AddStatsBucket(back);
return response.Build().ToByteString();
}
#endregion
private ByteString OnGetToonSettings(BattleClient Client, ByteString data)
{
var request = GetToonSettings.ParseFrom(data);
var response = D3.Client.ToonSettings.CreateBuilder();
return response.Build().ToByteString();
}
private ByteString CurrentToon(BattleClient Client, ByteString data)
{
SelectHero req = SelectHero.ParseFrom(data);
D3.Client.ToonSettings.Builder res = D3.Client.ToonSettings.CreateBuilder();
return req.ToByteString();
}
private ByteString GetHeroProfs(BattleClient Client, ByteString data)
{
var testRequest = GetHeroProfiles.ParseFrom(data);
var profileList = D3.Profile.HeroProfileList.CreateBuilder();
if (testRequest.HeroIdsCount > 0)
{
foreach (var hero in testRequest.HeroIdsList)
{
var toon = ToonManager.GetToonByLowID(hero);
if (toon.Dead == false)
profileList.AddHeros(toon.Profile);
}
}
else
{
var heroList = GameAccountManager.GetAccountByPersistentID(testRequest.AccountId.Id).Toons;
foreach (var hero in heroList)
{
if (hero.Dead == false)
profileList.AddHeros(hero.Profile);
}
}
return profileList.Build().ToByteString();
}
private ByteString GetDeadedHeroDigests(BattleClient Client, ByteString data)
{
var HeroDigestList = D3.Hero.DigestList.CreateBuilder();
foreach (Toon t in Client.Account.GameAccount.Toons)
{
if (t.IsHardcore == true)
if (t.Dead == true)
HeroDigestList.AddDigests(t.Digest);
}
return HeroDigestList.Build().ToByteString();
}
private ByteString GetDeadedHeroProfs(BattleClient Client, ByteString data)
{
var testRequest = GetFallenHeros.ParseFrom(data);
var test = D3.CS.FallenHero.CreateBuilder();
var t1 = ArchiveHardcoreResponse.CreateBuilder();
var profileList = HeroProfileList.CreateBuilder();
/*if (testRequest.HeroIdsCount > 0)
{
foreach (var hero in testRequest.HeroIdsList)
{
var toon = ToonManager.GetToonByLowID(hero);
if (toon.Dead
=== true)
profileList.AddHeros(toon.Profile);
}
}
else*/
{
var heroList = GameAccountManager.GetAccountByPersistentID(testRequest.AccountId.Id).Toons;
foreach (var hero in heroList)
{
//if (hero.Hardcore == true)
// if (hero.Dead == true)
profileList.AddHeros(hero.Profile);
}
}
return profileList.Build().ToByteString();
}
private ByteString SelectToon(BattleClient Client, ByteString data)
{
var request = D3.GameMessage.HeroDigestListRequest.ParseFrom(data);
var builder = HeroDigestListResponse.CreateBuilder();
foreach (var toon in request.ToonIdList)
builder.AddDigestList(ToonManager.GetToonByLowID(toon).Digest);
return builder.Build().ToByteString();
}
private ByteString SendWarden3Custom(BattleClient Client, ByteString data)
{
byte[] response270 = new byte[] { 8, 137, 249, 159, 185, 12, 16, 136, 14 };
return ByteString.CopyFrom(response270);
}
private ByteString GetAchievements(BattleClient Client, ByteString data)
{
var HeroDigestList = D3.Hero.DigestList.CreateBuilder();
foreach (Toon t in Client.Account.GameAccount.Toons) HeroDigestList.AddDigests(t.Digest);
var Snap = D3.CS.HeroesList.CreateBuilder().SetCurrentSeasonNum(1).SetCurrentSeasonState(1).SetDigests(HeroDigestList);
return Snap.Build().ToByteString();
}
private ByteString RebirthMethod(BattleClient Client, ByteString data)
{
RebirthHeroRequest Request = RebirthHeroRequest.ParseFrom(data);
var Response = RebirthHeroResponse.CreateBuilder();
foreach (Toon t in Client.Account.GameAccount.Toons)
{
if (t.D3EntityID.IdLow == Request.HeroId)
{
//t.SetSeason(1);
Response.SetHeroDigest(t.Digest);
}
}
return Response.Build().ToByteString();
}
private ByteString GetChallengeRift(BattleClient Client, ByteString data)
{
var request = ChallengeRiftFetchHeroData.ParseFrom(data);
var response = ChallengeRiftFetchHeroDataResponse.CreateBuilder();
response.SetAltLevel(1)
.SetBattleTag("TestForChallenge#0000")
.SetHeroDigest(D3.Hero.Digest.CreateBuilder()
.SetVersion(905)
.SetHeroId(D3.OnlineService.EntityId.CreateBuilder().SetIdHigh(0).SetIdLow(68056897))
.SetHeroName("TestForChallenge")
.SetGbidClass(54772266)
.SetLevel(70)
.SetPlayerFlags(8388624)
.SetVisualEquipment(D3.Hero.VisualEquipment.CreateBuilder()
.AddVisualItem(D3.Hero.VisualItem.CreateBuilder().SetGbid(1104405863))
.AddVisualItem(D3.Hero.VisualItem.CreateBuilder().SetGbid(868571512))
.AddVisualItem(D3.Hero.VisualItem.CreateBuilder().SetGbid(1493121096))
.AddVisualItem(D3.Hero.VisualItem.CreateBuilder().SetGbid(-1385479119))
.AddVisualItem(D3.Hero.VisualItem.CreateBuilder().SetGbid(-638474348))
.AddVisualItem(D3.Hero.VisualItem.CreateBuilder().SetGbid(1003477242))
.AddVisualItem(D3.Hero.VisualItem.CreateBuilder().SetGbid(-1499119737))
.AddVisualItem(D3.Hero.VisualItem.CreateBuilder().SetGbid(-1221469977))
.AddCosmeticItem(D3.Hero.VisualCosmeticItem.CreateBuilder().SetGbid(567892925))
.AddCosmeticItem(D3.Hero.VisualCosmeticItem.CreateBuilder().SetGbid(-83682124))
.AddCosmeticItem(D3.Hero.VisualCosmeticItem.CreateBuilder().SetGbid(-1200439285))
.AddCosmeticItem(D3.Hero.VisualCosmeticItem.CreateBuilder().SetGbid(949147389))
)
.SetLastPlayedAct(0)
.SetHighestUnlockedAct(3000)
.SetLastPlayedQuest(87700)
.SetLastPlayedQuestStep(-1)
.SetTimePlayed(119301)
.SetPvpRank(1)
.SetSeasonCreated(0)
.SetHighestSoloRiftCompleted(57)
)
.SetRewardGbid(456652071)
.SetTargetMillisecond(318566)
.SetChallengeEndTimeUnixSeconds(1586832804)
;
response.SetHeroProfile(HeroProfile.CreateBuilder()
.SetEquipment(D3.Items.ItemList.CreateBuilder()
.AddItems(D3.Items.SavedItem.CreateBuilder()
.SetId(ItemId.CreateBuilder().SetIdHigh(0).SetIdLow(54043195984020046))
.SetOwnerEntityId(D3.OnlineService.EntityId.CreateBuilder().SetIdHigh(0).SetIdLow(130817604))
.SetHirelingClass(0)
.SetItemSlot(288)
.SetSquareIndex(0)
.SetUsedSocketCount(1)
.SetGenerator(D3.Items.Generator.CreateBuilder()
.SetSeed(3437070505)
.SetGbHandle(D3.GameBalance.Handle.CreateBuilder().SetGameBalanceType(2).SetGbid(1104405863))
.AddBaseAffixes(-1392021261)
.AddBaseAffixes(1342579558)
.AddBaseAffixes(-889190757)
.AddBaseAffixes(1151246290)
.AddBaseAffixes(1274656075)
.AddBaseAffixes(-260600975)
.SetFlags(436491)
.SetDurability(257)
.SetStackSize(0)
.SetItemQualityLevel(9)
.SetItemBindingLevel(2)
.SetMaxDurability(257)
.AddContents(D3.Items.EmbeddedGenerator.CreateBuilder()
.SetId(ItemId.CreateBuilder().SetIdHigh(0).SetIdLow(4323455643408519424))
.SetGenerator(D3.Items.Generator.CreateBuilder()
.SetSeed(2696508178)
.SetGbHandle(D3.GameBalance.Handle.CreateBuilder().SetGameBalanceType(2).SetGbid(-1038303580))
.SetFlags(436491)
.SetDurability(0)
.SetStackSize(1)
.SetItemBindingLevel(2)
.SetSeasonCreated(20)
)
)
.SetLegendaryItemLevel(70)
.SetSeasonCreated(20)
.SetLegendaryBaseItemGbid(620036249)
)
)
)
.SetSnoActiveSkills(SkillsWithRunes.CreateBuilder()
.AddRunes(SkillWithRune.CreateBuilder().SetSkill(108506).SetRuneType(4))
.AddRunes(SkillWithRune.CreateBuilder().SetSkill(69867).SetRuneType(1))
.AddRunes(SkillWithRune.CreateBuilder().SetSkill(67668).SetRuneType(4))
.AddRunes(SkillWithRune.CreateBuilder().SetSkill(106237).SetRuneType(0))
.AddRunes(SkillWithRune.CreateBuilder().SetSkill(117402).SetRuneType(4))
.AddRunes(SkillWithRune.CreateBuilder().SetSkill(67616).SetRuneType(1))
)
.SetSnoTraits(PassiveSkills.CreateBuilder()
.AddSnoTraits(208628)
.AddSnoTraits(208639)
.AddSnoTraits(208594)
.AddSnoTraits(218191)
)
.SetLegendaryPowers(LegendaryPowers.CreateBuilder()
.AddGbidLegendaryPowers(1889450717)
.AddGbidLegendaryPowers(-2073208480)
.AddGbidLegendaryPowers(1160204002)
)
);
#region Etalon
/*
alt_level: 446
hero_digest {
version: 905
hero_id {
id_high: 0
id_low: 68056897
}
hero_name: "\350\275\273\346\205\242\350\200\214\350\265\267\350\210\236\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
gbid_class: -1104684007
level: 70
player_flags: 1585446930
visual_equipment {
visual_item {
gbid: -1992164625
}
visual_item {
gbid: 259933632
}
visual_item {
gbid: -800755056
}
visual_item {
gbid: 2059399737
}
visual_item {
gbid: 237815937
}
visual_item {
gbid: 841509030
}
visual_item {
gbid: -1980761457
}
visual_item {
gbid: -774345512
}
cosmetic_item {
gbid: 1030142027
}
cosmetic_item {
}
cosmetic_item {
}
cosmetic_item {
gbid: 114305539
}
}
last_played_act: 400
highest_unlocked_act: 3000
last_played_quest: -1
last_played_quest_step: -1
time_played: 527881
pvp_rank: 1
season_created: 0
highest_solo_rift_completed: 54
}
hero_profile {
equipment {
items {
id {
id_high: 0
id_low: 2395915002591459005
}
owner_entity_id {
id_high: 0
id_low: 68056897
}
hireling_class: 0
item_slot: 288
square_index: 0
used_socket_count: 1
generator {
seed: 860017891
gb_handle {
game_balance_type: 2
gbid: -1993314873
}
base_affixes: -260600975
base_affixes: 2066794450
base_affixes: -1900569383
base_affixes: -889190756
base_affixes: 1342579558
base_affixes: -993623678
flags: 3339
durability: 347
stack_size: 0
item_quality_level: 9
item_binding_level: 2
max_durability: 347
contents {
id {
id_high: 0
id_low: 2395915002591459006
}
generator {
seed: 3676334038
gb_handle {
game_balance_type: 2
gbid: -848028873
}
flags: 2319
durability: 0
stack_size: 1
item_binding_level: 2
season_created: 0
}
}
legendary_item_level: 70
transmog_gbid: -1992164625
season_created: 0
enchanted_affix_old: -1900569383
enchanted_affix_new: 432187391
legendary_base_item_gbid: 1565456767
enchanted_affix_seed: 3177548108
enchanted_affix_count: 22
}
}
items {
id {
id_high: 0
id_low: 3152519740255919235
}
owner_entity_id {
id_high: 0
id_low: 68056897
}
hireling_class: 0
item_slot: 304
square_index: 0
used_socket_count: 3
generator {
seed: 813905168
gb_handle {
game_balance_type: 2
gbid: 258783384
}
base_affixes: -997350627
base_affixes: -522962331
base_affixes: 1444204450
base_affixes: 82091320
base_affixes: 1342579571
base_affixes: -1170857815
flags: 2315
durability: 332
stack_size: 0
item_quality_level: 9
item_binding_level: 2
max_durability: 332
contents {
id {
id_high: 0
id_low: 2089670228029338625
}
generator {
seed: 3610959166
gb_handle {
game_balance_type: 2
gbid: 1019190666
}
flags: 43275
durability: 0
stack_size: 1
item_binding_level: 2
season_created: 0
}
}
contents {
id {
id_high: 0
id_low: 2089670228029338632
}
generator {
seed: 3588885479
gb_handle {
game_balance_type: 2
gbid: 1019190666
}
flags: 43275
durability: 0
stack_size: 1
item_binding_level: 2
season_created: 0
}
}
contents {
id {
id_high: 0
id_low: 2089670228029338633
}
generator {
seed: 3132810486
gb_handle {
game_balance_type: 2
gbid: 1019190666
}
flags: 43275
durability: 0
stack_size: 1
item_binding_level: 2
season_created: 0
}
}
legendary_item_level: 70
transmog_gbid: 259933632
season_created: 0
enchanted_affix_old: 1444204450
enchanted_affix_new: -454279577
legendary_base_item_gbid: 1612259889
enchanted_affix_seed: 2592320242
enchanted_affix_count: 82
}
}
items {
id {
id_high: 0
id_low: 2395915002591458988
}
owner_entity_id {
id_high: 0
id_low: 68056897
}
hireling_class: 0
item_slot: 320
square_index: 0
used_socket_count: 0
generator {
seed: 2119670951
gb_handle {
game_balance_type: 2
gbid: 841509030
}
base_affixes: -708791752
base_affixes: 82091320
base_affixes: 1444204450
base_affixes: -454279577
base_affixes: -993623679
flags: 2315
durability: 263
stack_size: 0
item_quality_level: 9
item_binding_level: 2
max_durability: 263
legendary_item_level: 70
season_created: 0
enchanted_affix_old: 1444204450
enchanted_affix_new: 783505022
legendary_base_item_gbid: 1815809043
enchanted_affix_seed: 2984547919
enchanted_affix_count: 37
}
}
items {
id {
id_high: 0
id_low: 2089670228029332721
}
owner_entity_id {
id_high: 0
id_low: 68056897
}
hireling_class: 0
item_slot: 336
square_index: 0
used_socket_count: 1
generator {
seed: 1999325384
gb_handle {
game_balance_type: 2
gbid: 237815937
}
base_affixes: 955554965
base_affixes: -620982138
base_affixes: -415821016
base_affixes: 1646833580
base_affixes: -303435822
flags: 43275
durability: 300
stack_size: 0
item_quality_level: 9
item_binding_level: 2
max_durability: 300
contents {
id {
id_high: 0
id_low: 2395915002591459002
}
generator {
seed: 2512707236
gb_handle {
game_balance_type: 2
gbid: -1456001726
}
flags: 2315
durability: 0
stack_size: 1
item_binding_level: 2
season_created: 0
}
}
legendary_item_level: 70
season_created: 0
enchanted_affix_old: -415821016
enchanted_affix_new: 1342579558
legendary_base_item_gbid: -873319305
enchanted_affix_seed: 1612936527
enchanted_affix_count: 1
}
}
items {
id {
id_high: 0
id_low: 2395915002591459007
}
owner_entity_id {
id_high: 0
id_low: 68056897
}
hireling_class: 0
item_slot: 352
square_index: 0
used_socket_count: 0
generator {
seed: 2545353357
gb_handle {
game_balance_type: 2
gbid: 2058249489
}
base_affixes: -993623679
base_affixes: 783505022
base_affixes: -889190757
base_affixes: 611264315
base_affixes: 1406385324
base_affixes: 555585138
flags: 2315
durability: 309
stack_size: 0
item_quality_level: 9
item_binding_level: 2
max_durability: 309
legendary_item_level: 70
transmog_gbid: 2059399737
season_created: 0
enchanted_affix_old: 611264315
enchanted_affix_new: -1064392808
legendary_base_item_gbid: -1533912119
enchanted_affix_seed: 2967401546
enchanted_affix_count: 37
}
}
items {
id {
id_high: 0
id_low: 2485986995225715174
}
owner_entity_id {
id_high: 0
id_low: 68056897
}
hireling_class: 0
item_slot: 368
square_index: 0
used_socket_count: 0
generator {
seed: 2285458808
gb_handle {
game_balance_type: 2
gbid: 924103246
}
base_affixes: -1170857815
base_affixes: 1363430979
base_affixes: -1650911650
flags: 43275
durability: 308
stack_size: 0
item_quality_level: 9
item_binding_level: 2
max_durability: 308
legendary_item_level: 70
season_created: 0
legendary_base_item_gbid: 2112157589
}
}
items {
id {
id_high: 0
id_low: 2395915002591458975
}
owner_entity_id {
id_high: 0
id_low: 68056897
}
hireling_class: 0
item_slot: 384
square_index: 0
used_socket_count: 0
generator {
seed: 2064410481
gb_handle {
game_balance_type: 2
gbid: -801905304
}
base_affixes: -1170857815
base_affixes: 1363430979
base_affixes: 1936411023
base_affixes: 98886379
base_affixes: 966382508
base_affixes: -708791752
flags: 2315
durability: 433
stack_size: 0
item_quality_level: 9
item_binding_level: 2
max_durability: 433
legendary_item_level: 70
transmog_gbid: -800755056
season_created: 0
enchanted_affix_old: 1936411023
enchanted_affix_new: 432187391
legendary_base_item_gbid: 2140882336
enchanted_affix_seed: 543031971
enchanted_affix_count: 39
}
}
items {
id {
id_high: 0
id_low: 2395915002591458973
}
owner_entity_id {
id_high: 0
id_low: 68056897
}
hireling_class: 0
item_slot: 400
square_index: 0
used_socket_count: 0
generator {
seed: 3768965997
gb_handle {
game_balance_type: 2
gbid: -1981911705
}
base_affixes: -1170857815
base_affixes: 611264315
base_affixes: 1363430979
base_affixes: 1889120614
base_affixes: -670436801
base_affixes: 555585138
flags: 2315
durability: 389
stack_size: 0
item_quality_level: 9
item_binding_level: 2
max_durability: 389
legendary_item_level: 70
transmog_gbid: -1980761457
season_created: 0
enchanted_affix_old: 1889120614
enchanted_affix_new: -454279577
legendary_base_item_gbid: 365492434
enchanted_affix_seed: 3942732396
enchanted_affix_count: 14
}
}
items {
id {
id_high: 0
id_low: 2395915002591458984
}
owner_entity_id {
id_high: 0
id_low: 68056897
}
hireling_class: 0
item_slot: 416
square_index: 0
used_socket_count: 2
generator {
seed: 2359142568
gb_handle {
game_balance_type: 2
gbid: 825865639
}
base_affixes: -1170857815
base_affixes: 1355452559
base_affixes: 611264315
base_affixes: 1444204450
base_affixes: 555585138
base_affixes: -1613479975
flags: 2315
durability: 444
stack_size: 0
item_quality_level: 9
item_binding_level: 2
max_durability: 444
contents {
id {
id_high: 0
id_low: 2089670228029338466
}
generator {
seed: 1542136307
gb_handle {
game_balance_type: 2
gbid: 1019190666
}
flags: 43275
durability: 0
stack_size: 1
item_binding_level: 2
season_created: 0
}
}
contents {
id {
id_high: 0
id_low: 2089670228029338437
}
generator {
seed: 3259546689
gb_handle {
game_balance_type: 2
gbid: 1019190666
}
flags: 43279
durability: 0
stack_size: 1
item_binding_level: 2
season_created: 0
}
}
legendary_item_level: 70
transmog_gbid: -774345512
season_created: 0
enchanted_affix_old: 1444204450
enchanted_affix_new: 1363430979
legendary_base_item_gbid: -1512729953
enchanted_affix_seed: 2578006689
enchanted_affix_count: 9
}
}
items {
id {
id_high: 0
id_low: 2395915002591459004
}
owner_entity_id {
id_high: 0
id_low: 68056897
}
hireling_class: 0
item_slot: 432
square_index: 0
used_socket_count: 0
generator {
seed: 2557074620
gb_handle {
game_balance_type: 2
gbid: 962282719
}
base_affixes: -574194875
base_affixes: 1363430979
base_affixes: 1412926752
base_affixes: -1428872617
base_affixes: -1170857815
flags: 2315
durability: 360
stack_size: 0
item_quality_level: 9
item_binding_level: 2
max_durability: 360
legendary_item_level: 70
season_created: 0
enchanted_affix_old: -1428872617
enchanted_affix_new: 91845950
legendary_base_item_gbid: -875942693
enchanted_affix_seed: 1610014882
enchanted_affix_count: 3
}
}
items {
id {
id_high: 0
id_low: 2395915002591458960
}
owner_entity_id {
id_high: 0
id_low: 68056897
}
hireling_class: 0
item_slot: 448
square_index: 0
used_socket_count: 1
generator {
seed: 858994610
gb_handle {
game_balance_type: 2
gbid: 1978116233
}
base_affixes: -1613479975
base_affixes: 966382508
base_affixes: -1064392808
base_affixes: -1588234626
base_affixes: -1170857815
base_affixes: 1342579558
flags: 67851
durability: 350
stack_size: 0
item_quality_level: 9
item_binding_level: 2
max_durability: 350
contents {
id {
id_high: 0
id_low: 2395915002591458961
}
generator {
seed: 1974443180
gb_handle {
game_balance_type: 2
gbid: -1046348118
}
flags: 67851
durability: 0
stack_size: 0
item_quality_level: 9
item_binding_level: 2
season_created: 0
jewel_rank: 50
}
}
legendary_item_level: 70
season_created: 0
enchanted_affix_old: -1588234626
enchanted_affix_new: 232461798
legendary_base_item_gbid: 1146967350
enchanted_affix_seed: 944591465
enchanted_affix_count: 15
}
}
items {
id {
id_high: 0
id_low: 2395915002591458826
}
owner_entity_id {
id_high: 0
id_low: 68056897
}
hireling_class: 0
item_slot: 464
square_index: 0
used_socket_count: 1
generator {
seed: 3351932141
gb_handle {
game_balance_type: 2
gbid: 1978152170
}
base_affixes: -670436801
base_affixes: -1322426367
base_affixes: 1363430979
base_affixes: 232461798
base_affixes: -1170857815
base_affixes: 1342579558
flags: 67851
durability: 269
stack_size: 0
item_quality_level: 9
item_binding_level: 2
max_durability: 269
contents {
id {
id_high: 0
id_low: 2395915002591458827
}
generator {
seed: 1498634001
gb_handle {
game_balance_type: 2
gbid: -1045090323
}
flags: 67851
durability: 0
stack_size: 0
item_quality_level: 9
item_binding_level: 2
season_created: 0
jewel_rank: 50
}
}
legendary_item_level: 70
season_created: 0
enchanted_affix_old: 1363430979
enchanted_affix_new: -1064392808
legendary_base_item_gbid: 1146967350
enchanted_affix_seed: 2940133443
enchanted_affix_count: 32
}
}
items {
id {
id_high: 0
id_low: 2395915002591458802
}
owner_entity_id {
id_high: 0
id_low: 68056897
}
hireling_class: 0
item_slot: 480
square_index: 0
used_socket_count: 1
generator {
seed: 1872323009
gb_handle {
game_balance_type: 2
gbid: 1528310934
}
base_affixes: -1254226428
base_affixes: 1342579558
base_affixes: -889190756
base_affixes: 1913242032
base_affixes: -993623678
base_affixes: -627228777
flags: 68875
durability: 337
stack_size: 0
item_quality_level: 9
item_binding_level: 2
max_durability: 337
contents {
id {
id_high: 0
id_low: 2395915002591458817
}
generator {
seed: 1439668742
gb_handle {
game_balance_type: 2
gbid: -1046204370
}
flags: 67851
durability: 0
stack_size: 0
item_quality_level: 9
item_binding_level: 2
season_created: 0
jewel_rank: 34
}
}
legendary_item_level: 70
season_created: 0
enchanted_affix_old: -889190756
enchanted_affix_new: 783505022
legendary_base_item_gbid: 1682228656
enchanted_affix_seed: 2536073229
enchanted_affix_count: 3
}
}
items {
id {
id_high: 0
id_low: 738590339582893671
}
owner_entity_id {
id_high: 0
id_low: 68056897
}
hireling_class: 0
item_slot: 592
square_index: 0
used_socket_count: 0
generator {
seed: 3927525989
gb_handle {
game_balance_type: 2
gbid: -2018707798
}
flags: 43275
durability: 357
stack_size: 0
item_quality_level: 9
item_binding_level: 2
max_durability: 357
season_created: 0
}
}
items {
id {
id_high: 0
id_low: 2395915002591458974
}
owner_entity_id {
id_high: 0
id_low: 68056897
}
hireling_class: 1
item_slot: 1296
square_index: 0
used_socket_count: 0
generator {
seed: 3413238101
gb_handle {
game_balance_type: 2
gbid: 161312714
}
base_affixes: -744661497
base_affixes: -436436258
base_affixes: -746302019
base_affixes: -889190756
base_affixes: -993623678
flags: 3339
durability: 365
stack_size: 0
item_quality_level: 9
item_binding_level: 2
max_durability: 365
legendary_item_level: 70
season_created: 0
legendary_base_item_gbid: 1815809043
}
}
items {
id {
id_high: 0
id_low: 2395915002591458998
}
owner_entity_id {
id_high: 0
id_low: 68056897
}
hireling_class: 1
item_slot: 1312
square_index: 0
used_socket_count: 0
generator {
seed: 1990428352
gb_handle {
game_balance_type: 2
gbid: 1350507102
}
base_affixes: 1154440475
base_affixes: 996645142
base_affixes: -889190756
base_affixes: -993623678
base_affixes: -1034448274
flags: 3339
durability: 444
stack_size: 0
item_quality_level: 9
item_binding_level: 2
max_durability: 444
legendary_item_level: 70
season_created: 0
legendary_base_item_gbid: -270935653
}
}
items {
id {
id_high: 0
id_low: 2395915002591459003
}
owner_entity_id {
id_high: 0
id_low: 68056897
}
hireling_class: 1
item_slot: 1328
square_index: 0
used_socket_count: 0
generator {
seed: 3638447227
gb_handle {
game_balance_type: 2
gbid: -765770609
}
base_affixes: -708791752
base_affixes: -362198678
base_affixes: 1014533493
base_affixes: 1913242032
base_affixes: -993623679
flags: 2315
durability: 307
stack_size: 0
item_quality_level: 9
item_binding_level: 2
max_durability: 307
legendary_item_level: 70
season_created: 0
legendary_base_item_gbid: 1147341804
}
}
items {
id {
id_high: 0
id_low: 1423137484191371416
}
owner_entity_id {
id_high: 0
id_low: 68056897
}
hireling_class: 1
item_slot: 1344
square_index: 0
used_socket_count: 0
generator {
seed: 168474578
gb_handle {
game_balance_type: 2
gbid: 1566296343
}
base_affixes: -993623678
base_affixes: 783505022
base_affixes: -942168372
base_affixes: -1985526412
base_affixes: -522962331
flags: 44299
durability: 286
stack_size: 0
item_quality_level: 9
item_binding_level: 2
max_durability: 286
legendary_item_level: 70
season_created: 0
legendary_base_item_gbid: 1682228656
}
}
items {
id {
id_high: 0
id_low: 2395915002591458996
}
owner_entity_id {
id_high: 0
id_low: 68056897
}
hireling_class: 1
item_slot: 1360
square_index: 0
used_socket_count: 0
generator {
seed: 1448599879
gb_handle {
game_balance_type: 2
gbid: 1978152170
}
base_affixes: -670436801
base_affixes: -1322426367
base_affixes: 717893392
base_affixes: -1064392808
base_affixes: -1170857815
base_affixes: 1342579558
flags: 2315
durability: 351
stack_size: 0
item_quality_level: 9
item_binding_level: 2
max_durability: 351
legendary_item_level: 70
season_created: 0
legendary_base_item_gbid: 1146967350
}
}
items {
id {
id_high: 0
id_low: 2395915002591458987
}
owner_entity_id {
id_high: 0
id_low: 68056897
}
hireling_class: 1
item_slot: 1376
square_index: 0
used_socket_count: 0
generator {
seed: 840216012
gb_handle {
game_balance_type: 2
gbid: -1187794594
}
base_affixes: 966382508
base_affixes: 1363430979
base_affixes: 232461798
base_affixes: -1170857815
flags: 2315
durability: 384
stack_size: 0
item_quality_level: 9
item_binding_level: 2
max_durability: 384
legendary_item_level: 70
season_created: 0
legendary_base_item_gbid: 1146967350
}
}
items {
id {
id_high: 0
id_low: 2395915002591458972
}
owner_entity_id {
id_high: 0
id_low: 0
}
hireling_class: 2
item_slot: 1312
square_index: 0
used_socket_count: 0
generator {
seed: 1960495955
gb_handle {
game_balance_type: 2
gbid: -2091504069
}
base_affixes: -2113755303
base_affixes: 1656971390
flags: 2313
durability: 499
stack_size: 0
item_quality_level: 4
max_durability: 499
season_created: 0
}
}
items {
id {
id_high: 0
id_low: 2395915002591459008
}
owner_entity_id {
id_high: 0
id_low: 0
}
hireling_class: 2
item_slot: 1328
square_index: 0
used_socket_count: 0
generator {
seed: 554456963
gb_handle {
game_balance_type: 2
gbid: 978821514
}
base_affixes: 555585138
base_affixes: -362198678
base_affixes: 611264315
base_affixes: -889190757
base_affixes: -1598227767
flags: 2315
durability: 443
stack_size: 0
item_quality_level: 9
item_binding_level: 2
max_durability: 443
legendary_item_level: 70
season_created: 0
legendary_base_item_gbid: -229899866
}
}
items {
id {
id_high: 0
id_low: 2395915002591458980
}
owner_entity_id {
id_high: 0
id_low: 0
}
hireling_class: 3
item_slot: 1312
square_index: 0
used_socket_count: 0
generator {
seed: 1372590090
gb_handle {
game_balance_type: 2
gbid: -1170762813
}
base_affixes: 1661455571
base_affixes: -595374178
base_affixes: -1765925748
base_affixes: 1342579558
base_affixes: -303435822
flags: 2315
durability: 374
stack_size: 0
item_quality_level: 9
item_binding_level: 2
max_durability: 374
legendary_item_level: 70
season_created: 0
legendary_base_item_gbid: -2115688088
}
}
items {
id {
id_high: 0
id_low: 2395915002591458997
}
owner_entity_id {
id_high: 0
id_low: 0
}
hireling_class: 3
item_slot: 1328
square_index: 0
used_socket_count: 0
generator {
seed: 2470846102
gb_handle {
game_balance_type: 2
gbid: -450681608
}
base_affixes: -863531393
base_affixes: -889190757
base_affixes: -362198678
base_affixes: 1913242032
base_affixes: -1392021261
flags: 2315
durability: 402
stack_size: 0
item_quality_level: 9
item_binding_level: 2
max_durability: 402
legendary_item_level: 70
season_created: 0
legendary_base_item_gbid: 761439029
}
}
items {
id {
id_high: 0
id_low: 2395915002591458981
}
owner_entity_id {
id_high: 0
id_low: 0
}
hireling_class: 3
item_slot: 1344
square_index: 0
used_socket_count: 0
generator {
seed: 3934740857
gb_handle {
game_balance_type: 2
gbid: 1682228656
}
base_affixes: -993623680
base_affixes: -889190758
base_affixes: -1519552049
base_affixes: 71995443
base_affixes: 512347501
rare_item_name {
item_name_is_prefix: false
sno_affix_string_list: 130729
affix_string_list_index: 2
item_string_list_index: 5
}
flags: 2313
durability: 405
stack_size: 0
item_quality_level: 7
max_durability: 405
season_created: 0
}
}
items {
id {
id_high: 0
id_low: 2395915002591458993
}
owner_entity_id {
id_high: 0
id_low: 0
}
hireling_class: 3
item_slot: 1360
square_index: 0
used_socket_count: 0
generator {
seed: 1165105980
gb_handle {
game_balance_type: 2
gbid: -1188729220
}
base_affixes: -1307815087
base_affixes: -1588234626
base_affixes: 1311365575
base_affixes: -1985526412
base_affixes: 886664040
flags: 2315
durability: 368
stack_size: 0
item_quality_level: 9
item_binding_level: 2
max_durability: 368
legendary_item_level: 67
season_created: 0
legendary_base_item_gbid: 1146967349
}
}
items {
id {
id_high: 0
id_low: 2395915002591458994
}
owner_entity_id {
id_high: 0
id_low: 0
}
hireling_class: 3
item_slot: 1376
square_index: 0
used_socket_count: 0
generator {
seed: 3751822759
gb_handle {
game_balance_type: 2
gbid: -1149737311
}
base_affixes: 966382508
base_affixes: 1363430979
base_affixes: 611264315
base_affixes: 1151246290
base_affixes: -1170857815
flags: 2315
durability: 303
stack_size: 0
item_quality_level: 9
item_binding_level: 2
max_durability: 303
legendary_item_level: 70
season_created: 0
legendary_base_item_gbid: 1146967350
}
}
items {
id {
id_high: 0
id_low: 738590339582893671
}
owner_entity_id {
id_high: 0
id_low: 68056897
}
hireling_class: 0
item_slot: 592
square_index: 0
used_socket_count: 0
generator {
seed: 3927525989
gb_handle {
game_balance_type: 2
gbid: -2018707798
}
flags: 43275
durability: 357
stack_size: 0
item_quality_level: 9
item_binding_level: 2
max_durability: 357
season_created: 0
}
}
}
sno_active_skills {
runes {
skill: 286510
rune_type: 4
}
runes {
skill: 239042
rune_type: 3
}
runes {
skill: 291804
rune_type: 1
}
runes {
skill: 243853
rune_type: 1
}
runes {
skill: 342281
rune_type: 2
}
runes {
skill: 269032
rune_type: 4
}
}
sno_traits {
sno_traits: 286177
sno_traits: 311629
sno_traits: 310804
sno_traits: 309830
}
legendary_powers {
gbid_legendary_powers: -990363367
gbid_legendary_powers: -1046338483
gbid_legendary_powers: 417069418
}
}
reward_gbid: 456652071
target_millisecond: 362116
challenge_end_time_unix_seconds: 1583200800
*/
#endregion
return response.Build().ToByteString();
}
private ByteString ClearMissions(BattleClient Client, ByteString data)
{
var request = ResetHeroStoryProgress.ParseFrom(data);
return request.ToByteString();
}
private static byte[] StringToByteArray(string hex)
{
return Enumerable.Range(0, hex.Length)
.Where(x => x % 2 == 0)
.Select(x => Convert.ToByte(hex.Substring(x, 2), 16))
.ToArray();
}
private ByteString GetGameAccountSettings(BattleClient client)
{
Logger.Trace("GetGameAccountSettings()");
var gameAccount = client.Account.GameAccount;
return gameAccount.Settings.ToByteString();
}
private ByteString SetGameAccountSettings(D3.GameMessage.SetGameAccountSettings settings, BattleClient client)
{
Logger.Trace("SetGameAccountSettings()");
client.Account.GameAccount.Settings = settings.Settings;
return ByteString.Empty;
}
private static BNetPacket GetPacketFromHexByteArray(byte[] bytemessage)
{
DotNetty.Buffers.IByteBuffer BB = DotNetty.Buffers.Unpooled.WrappedBuffer(bytemessage);
DotNetty.Codecs.Http.WebSockets.BinaryWebSocketFrame msg = new DotNetty.Codecs.Http.WebSockets.BinaryWebSocketFrame(BB);
if (msg.Content.ReadableBytes < 2)
{
return null;
}
int headerSize = msg.Content.ReadUnsignedShort();
if (msg.Content.ReadableBytes < headerSize)
{
return null;
}
byte[] headerBuf = new byte[headerSize];
msg.Content.ReadBytes(headerBuf);
Header header = Header.ParseFrom(headerBuf);
int payloadSize = header.HasSize ? (int)header.Size : msg.Content.ReadableBytes;
if (msg.Content.ReadableBytes < payloadSize)
{
return null;
}
byte[] payload = new byte[payloadSize];
msg.Content.ReadBytes(payload);
return new BNetPacket(header, payload);
}
private ByteString OnGetAccountPrefs(BattleClient Client, ByteString data)
{
return ByteString.Empty;
}
#endregion
#region Heroes of The Storm
private ByteString FirstRequest(BattleClient Client, ClientRequest request)
{
return null;// res.Build().ToByteString();
}
#endregion
}
}