Merge pull request #64 from DeKaN/community

Sync community branch with master
This commit is contained in:
pr701 2023-01-18 01:09:44 +03:00 committed by GitHub
commit ae4824d869
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
22 changed files with 218 additions and 61 deletions

View File

@ -35,7 +35,7 @@ DiIiS is a fully-functional open-source local server for [Diablo III: Reaper of
Each version of the client includes changes to structures, opcodes and attributes. Each version of the client includes changes to structures, opcodes and attributes.
The currently supported version of the client: **2.7.3.82785** The currently supported version of the client: **2.7.4.84161**
## Server Deploying ## Server Deploying

View File

@ -76,9 +76,9 @@ namespace DiIiS_NA.LoginServer.AccountsSystem
ParagonLevelHardcore = 0, ParagonLevelHardcore = 0,
Experience = 7200000, Experience = 7200000,
ExperienceHardcore = 7200000, ExperienceHardcore = 7200000,
StashSize = 70, StashSize = 700, // Default stash sizes should be 70 with purchasable upgrades
HardcoreStashSize = 70, HardcoreStashSize = 700,
SeasonStashSize = 70, SeasonStashSize = 700,
BloodShards = 0, BloodShards = 0,
HardcoreBloodShards = 0, HardcoreBloodShards = 0,
BossProgress = new byte[] { 0xff, 0xff, 0xff, 0xff, 0xff }, BossProgress = new byte[] { 0xff, 0xff, 0xff, 0xff, 0xff },

View File

@ -31,7 +31,7 @@ namespace DiIiS_NA.LoginServer.GamesSystem
public D3.OnlineService.GameCreateParams GameCreateParams { get; private set; } public D3.OnlineService.GameCreateParams GameCreateParams { get; private set; }
public string Version = "2.7.3"; public string Version = "2.7.4";
public ulong FactoryID { get; private set; } public ulong FactoryID { get; private set; }
public KeyValuePair<string, BattleBackend.ServerDescriptor> GServer { get; private set; } public KeyValuePair<string, BattleBackend.ServerDescriptor> GServer { get; private set; }
public ulong RequestId { get; private set; } public ulong RequestId { get; private set; }

View File

@ -87,18 +87,6 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services
Init.SetGameAccountSettings(GAS); Init.SetGameAccountSettings(GAS);
Init.SetHeroDigests(d); Init.SetHeroDigests(d);
Init.SetAccountDigest(Client.Account.GameAccount.Digest); 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( Init.SetSyncedVars(
" OnlineService.Season.Num=1" + //Номер сезона " OnlineService.Season.Num=1" + //Номер сезона
" OnlineService.Season.State=1" + //Статус сезона, 1 - Активирован, 0 - Деактивирован " OnlineService.Season.State=1" + //Статус сезона, 1 - Активирован, 0 - Деактивирован
@ -3791,7 +3779,7 @@ challenge_end_time_unix_seconds: 1583200800
var gameAccount = client.Account.GameAccount; var gameAccount = client.Account.GameAccount;
return gameAccount.Settings.ToByteString(); return gameAccount.Settings.ToByteString();
} }
private ByteString SetGameAccountSettings(D3.GameMessage.SetGameAccountSettings settings, BattleClient client) private ByteString SetGameAccountSettings(SetGameAccountSettings settings, BattleClient client)
{ {
Logger.Trace("SetGameAccountSettings()"); Logger.Trace("SetGameAccountSettings()");
@ -3832,14 +3820,5 @@ challenge_end_time_unix_seconds: 1583200800
} }
#endregion #endregion
#region Heroes of The Storm
private ByteString FirstRequest(BattleClient Client, ClientRequest request)
{
return null;// res.Build().ToByteString();
}
#endregion
} }
} }

View File

@ -847,7 +847,6 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
snoAmbientOcclusionOverrideTex = null, snoAmbientOcclusionOverrideTex = null,
MarkerSetSNO = null, MarkerSetSNO = null,
MarkerSetIndex = null, MarkerSetIndex = null,
TimeActorCreated = null,
EnterKnownLookOverrides = null EnterKnownLookOverrides = null
}; };
} }

View File

@ -34,6 +34,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
}); });
player.CheckPointPosition = this.Position; player.CheckPointPosition = this.Position;
player.Attributes[GameAttribute.Corpse_Resurrection_Charges] = 3; // Reset corpse resurrection charges
} }
} }

View File

@ -928,9 +928,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
if (player.Attributes[GameAttribute.Hitpoints_Cur] == player.Attributes[GameAttribute.Hitpoints_Max]) if (player.Attributes[GameAttribute.Hitpoints_Cur] == player.Attributes[GameAttribute.Hitpoints_Max])
return; return;
player.AddPercentageHP(60); player.World.PowerManager.RunPower(player, 30211);
player.World.BuffManager.AddBuff(this, player, new PowerSystem.Implementations.CooldownBuff(30211, TickTimer.WaitSeconds(player.World.Game, 30f)));
/* Potions are no longer consumable
if (this.Attributes[GameAttribute.ItemStackQuantityLo] <= 1) if (this.Attributes[GameAttribute.ItemStackQuantityLo] <= 1)
player.Inventory.DestroyInventoryItem(this); // No more potions! player.Inventory.DestroyInventoryItem(this); // No more potions!
else else
@ -938,6 +938,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
this.UpdateStackCount(--this.Attributes[GameAttribute.ItemStackQuantityLo]); // Just remove one this.UpdateStackCount(--this.Attributes[GameAttribute.ItemStackQuantityLo]); // Just remove one
this.Attributes.SendChangedMessage(player.InGameClient); this.Attributes.SendChangedMessage(player.InGameClient);
} }
*/
return; return;
} }

View File

@ -1013,7 +1013,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
var legaDefinition = GetRandom(AllowedItems.Values var legaDefinition = GetRandom(AllowedItems.Values
.Where(def => .Where(def =>
def.ItemLevel <= Math.Min(level + 2, 73) def.ItemLevel <= Math.Min(level + 2, 73)
&& !ObsoleteItems.Contains(def.Hash) //obsolete 1.0.3 items && !ObsoleteItems.Contains(def.Hash)
&& UniqueItems.UniqueItemStats.ContainsKey(def.Hash) && UniqueItems.UniqueItemStats.ContainsKey(def.Hash)
&& def.Quality != ItemTable.ItemQuality.Special && def.Quality != ItemTable.ItemQuality.Special
&& (type == null ? true : ItemGroup.HierarchyToHashList(ItemGroup.FromHash(def.ItemTypesGBID)).Contains(type.Hash)) && (type == null ? true : ItemGroup.HierarchyToHashList(ItemGroup.FromHash(def.ItemTypesGBID)).Contains(type.Hash))

View File

@ -874,7 +874,7 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem
} }
public void SpawnRandomPotion(Actor source, Player player) public void SpawnRandomPotion(Actor source, Player player)
{ {
if (player != null && !player.Inventory.HaveEnough(DiIiS_NA.Core.Helpers.Hash.StringHashHelper.HashItemName("HealthPotionBottomless"), 100)) if (player != null && !player.Inventory.HaveEnough(DiIiS_NA.Core.Helpers.Hash.StringHashHelper.HashItemName("HealthPotionBottomless"), 1))
{ {
var item = ItemGenerator.GenerateRandomPotion(player); var item = ItemGenerator.GenerateRandomPotion(player);
if (item == null) return; if (item == null) return;

View File

@ -469,7 +469,6 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem
Attributes[GameAttribute.Buff_Icon_Count0, 0x00033C40] = 1; Attributes[GameAttribute.Buff_Icon_Count0, 0x00033C40] = 1;
Attributes[GameAttribute.Currencies_Discovered] = 0x0011FFF8; Attributes[GameAttribute.Currencies_Discovered] = 0x0011FFF8;
Attributes[GameAttribute.Stash_Tabs_Purchased_With_Gold] = 5;
this.Attributes[GameAttribute.Skill, 30592] = 1; this.Attributes[GameAttribute.Skill, 30592] = 1;
this.Attributes[GameAttribute.Resource_Degeneration_Prevented] = false; this.Attributes[GameAttribute.Resource_Degeneration_Prevented] = false;
@ -623,7 +622,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem
this.Attributes[GameAttribute.Cannot_Dodge] = false; this.Attributes[GameAttribute.Cannot_Dodge] = false;
this.Attributes[GameAttribute.Trait, 0x0000CE11] = 1; this.Attributes[GameAttribute.Trait, 0x0000CE11] = 1;
this.Attributes[GameAttribute.TeamID] = 2; this.Attributes[GameAttribute.TeamID] = 2;
this.Attributes[GameAttribute.Stash_Tabs_Purchased_With_Gold] = 1; this.Attributes[GameAttribute.Stash_Tabs_Purchased_With_Gold] = 5; // what do these do?
this.Attributes[GameAttribute.Stash_Tabs_Rewarded_By_Achievements] = 5;
this.Attributes[GameAttribute.Backpack_Slots] = 60; this.Attributes[GameAttribute.Backpack_Slots] = 60;
this.Attributes[GameAttribute.General_Cooldown] = 0; this.Attributes[GameAttribute.General_Cooldown] = 0;
} }
@ -1337,6 +1337,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem
this.Attributes[GameAttribute.Hitpoints_Cur] = this.Attributes[GameAttribute.Hitpoints_Max_Total]; this.Attributes[GameAttribute.Hitpoints_Cur] = this.Attributes[GameAttribute.Hitpoints_Max_Total];
this.Attributes[GameAttribute.Corpse_Resurrection_Charges] = 3;
//TestOutPutItemAttributes(); //Activate this only for finding item stats. //TestOutPutItemAttributes(); //Activate this only for finding item stats.
this.Attributes.BroadcastChangedIfRevealed(); this.Attributes.BroadcastChangedIfRevealed();
@ -2461,8 +2463,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem
} }
} }
} }
#if DEBUG #if DEBUG
Logger.Warn("Местополежение игрока {0}, Scene: {1} SNO: {2} LevelArea: {3}", this.Toon.Name, this.CurrentScene.SceneSNO.Name, this.CurrentScene.SceneSNO.Id, this.CurrentScene.Specification.SNOLevelAreas[0]); Logger.Warn("Местоположение игрока {0}, Scene: {1} SNO: {2} LevelArea: {3}", this.Toon.Name, this.CurrentScene.SceneSNO.Name, this.CurrentScene.SceneSNO.Id, this.CurrentScene.Specification.SNOLevelAreas[0]);
#else #else
#endif #endif
@ -2653,7 +2656,11 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem
this.Revive(this.CheckPointPosition); this.Revive(this.CheckPointPosition);
break; break;
case 2: case 2:
//this.Revive(this.Position); if (this.Attributes[GameAttribute.Corpse_Resurrection_Charges] > 0)
{
this.Revive(this.Position);
this.Attributes[GameAttribute.Corpse_Resurrection_Charges]--;
}
break; break;
} }
} }
@ -3810,8 +3817,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem
this.Attributes[GameAttribute.Resurrect_As_Observer] = state; this.Attributes[GameAttribute.Resurrect_As_Observer] = state;
//this.Attributes[GameAttribute.Observer] = !state; //this.Attributes[GameAttribute.Observer] = !state;
} }
//this.Attributes[GameAttribute.Corpse_Resurrection_Charges] = 1; //enable that to allow resurrecting at corpse //this.Attributes[GameAttribute.Corpse_Resurrection_Charges] = 1; // Enable this to allow unlimited resurrection at corpse
//this.Attributes[GameAttribute.Corpse_Resurrection_Allowed_Game_Time] = this.World.Game.TickCounter + 300; //timer for auto-revive //this.Attributes[GameAttribute.Corpse_Resurrection_Allowed_Game_Time] = this.World.Game.TickCounter + 300; // Timer for auto-revive (seems to be broken?)
this.Attributes.BroadcastChangedIfRevealed(); this.Attributes.BroadcastChangedIfRevealed();
} }
@ -5912,7 +5919,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem
minion.SetVisible(true); minion.SetVisible(true);
minion.Hidden = false; minion.Hidden = false;
if (minion.SNO == ActorSno._leah) if (minion.SNO == ActorSno._leah) // Act I Leah
{ {
(minion.Brain as MinionBrain).PresetPowers.Clear(); (minion.Brain as MinionBrain).PresetPowers.Clear();
(minion.Brain as MinionBrain).AddPresetPower(30599); (minion.Brain as MinionBrain).AddPresetPower(30599);

View File

@ -0,0 +1,24 @@
//Blizzless Project 2022
using System.Collections.Generic;
using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
using DiIiS_NA.GameServer.GSSystem.TickerSystem;
namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations.General
{
//30211 class DrinkHealthPotion
[ImplementsPowerSNO(30211)]
public class DrinkHealthPotion : PowerScript
{
public override IEnumerable<TickTimer> Run()
{
if (User is Player)
{
Player player = (Player)User;
player.AddPercentageHP(60);
AddBuff(player, player, new CooldownBuff(30211, TickTimer.WaitSeconds(player.World.Game, 30f)));
}
yield break;
}
}
}

View File

@ -2245,8 +2245,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations
else else
{ {
_beamEnd = SpawnEffect(ActorSno._wizard_rayoffrost_target, User.Position, 0, WaitInfinite()); _beamEnd = SpawnEffect(ActorSno._wizard_rayoffrost_target, User.Position, 0, WaitInfinite());
User.AddComplexEffect(RuneSelect(19327, 149835, -1, 149836, 149869, 149879), _beamEnd); User.AddComplexEffect((Rune_E > 0) ? 149879 : 19327, _beamEnd); // Rune E uses a special beam
if (Rune_A > 0) User.AddComplexEffect(19327, _beamEnd); User.AddComplexEffect(RuneSelect(-1, 149835, -1, 149836, 149869, -1), _beamEnd); // Runes A, C and D add effects on top of the standard beam
} }
} }

View File

@ -137,7 +137,8 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem
//ListenProximity(85843, new SpawnCultists()); //ListenProximity(85843, new SpawnCultists());
script = new SpawnCultists(); script = new SpawnCultists();
script.Execute(world); script.Execute(world);
ListenKill(ActorSno._triunecultist_c, 7, new Advance()); //ListenKill(ActorSno._triunecultist_c, 7, new Advance());
ListenProximity(ActorSno._enchantressnpc, new Advance()); // HACK: Skip ambush
}) })
}); });

View File

@ -29,7 +29,7 @@ namespace DiIiS_NA.GameServer.MessageSystem
ScriptedAttributeInitializer.ProcessAttributes(Attributes); ScriptedAttributeInitializer.ProcessAttributes(Attributes);
} }
#region 2.7.1 #region 2.7.4
//* //*
public static readonly GameAttributeF Axe_Bad_Data = new GameAttributeF(0, 0, -1, 0, 0, "", "", "Axe_Bad_Data", GameAttributeEncoding.Float32, 0, 0, 0, 32); public static readonly GameAttributeF Axe_Bad_Data = new GameAttributeF(0, 0, -1, 0, 0, "", "", "Axe_Bad_Data", GameAttributeEncoding.Float32, 0, 0, 0, 32);
public static readonly GameAttributeF Attribute_Timer = new GameAttributeF(1, 0, -1, 0, 0, "", "", "Attribute_Timer", GameAttributeEncoding.Float32, 0, 0, 0, 32); public static readonly GameAttributeF Attribute_Timer = new GameAttributeF(1, 0, -1, 0, 0, "", "", "Attribute_Timer", GameAttributeEncoding.Float32, 0, 0, 0, 32);
@ -375,12 +375,12 @@ namespace DiIiS_NA.GameServer.MessageSystem
public static readonly GameAttributeF World_Seed = new GameAttributeF(758, 0, -1, 0, 0, "", "", "World_Seed", GameAttributeEncoding.Float32, 0, 0, 0, 32); public static readonly GameAttributeF World_Seed = new GameAttributeF(758, 0, -1, 0, 0, "", "", "World_Seed", GameAttributeEncoding.Float32, 0, 0, 0, 32);
public static readonly GameAttributeF Combo_Time_Last_Move = new GameAttributeF(802, 0, -1, 0, 0, "", "", "Combo_Time_Last_Move", GameAttributeEncoding.Float32, 0, 0, 0, 32); public static readonly GameAttributeF Combo_Time_Last_Move = new GameAttributeF(802, 0, -1, 0, 0, "", "", "Combo_Time_Last_Move", GameAttributeEncoding.Float32, 0, 0, 0, 32);
public static readonly GameAttributeF Death_Replacement_Effect_Group_SNO = new GameAttributeF(804, -1, -1, 0, 0, "", "", "Death_Replacement_Effect_Group_SNO", GameAttributeEncoding.Float32, 0, 0, 0, 32); public static readonly GameAttributeF Death_Replacement_Effect_Group_SNO = new GameAttributeF(804, -1, -1, 0, 0, "", "", "Death_Replacement_Effect_Group_SNO", GameAttributeEncoding.Float32, 0, 0, 0, 32);
public static readonly GameAttributeF Checkpoint_Resurrection_Allowed_Game_Time = new GameAttributeF(805, 0, -1, 0, 0, "", "", "Checkpoint_Resurrection_Allowed_Game_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); public static readonly GameAttributeI Checkpoint_Resurrection_Allowed_Game_Time = new GameAttributeI(805, 0, -1, 0, 0, "", "", "Checkpoint_Resurrection_Allowed_Game_Time", GameAttributeEncoding.Int, 0, 0, 0, 32);
public static readonly GameAttributeF Checkpoint_Resurrection_Forced_Game_Time = new GameAttributeF(806, 0, -1, 0, 0, "", "", "Checkpoint_Resurrection_Forced_Game_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); public static readonly GameAttributeI Checkpoint_Resurrection_Forced_Game_Time = new GameAttributeI(806, 0, -1, 0, 0, "", "", "Checkpoint_Resurrection_Forced_Game_Time", GameAttributeEncoding.Int, 0, 0, 0, 32);
public static readonly GameAttributeF Corpse_Resurrection_Allowed_Game_Time = new GameAttributeF(807, 0, -1, 0, 0, "", "", "Corpse_Resurrection_Allowed_Game_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); public static readonly GameAttributeI Corpse_Resurrection_Allowed_Game_Time = new GameAttributeI(807, 0, -1, 0, 0, "", "", "Corpse_Resurrection_Allowed_Game_Time", GameAttributeEncoding.Int, 0, 0, 0, 32);
public static readonly GameAttributeF Controlling_TimedEvent_SNO = new GameAttributeF(810, -1, -1, 0, 0, "", "", "Controlling_TimedEvent_SNO", GameAttributeEncoding.Float32, 0, 0, 0, 32); public static readonly GameAttributeF Controlling_TimedEvent_SNO = new GameAttributeF(810, -1, -1, 0, 0, "", "", "Controlling_TimedEvent_SNO", GameAttributeEncoding.Float32, 0, 0, 0, 32);
public static readonly GameAttributeF Spawner_Concurrent_Count_ID = new GameAttributeF(855, -1, -1, 0, 0, "", "", "Spawner_Concurrent_Count_ID", GameAttributeEncoding.Float32, 0, 0, 0, 32); public static readonly GameAttributeF Spawner_Concurrent_Count_ID = new GameAttributeF(855, -1, -1, 0, 0, "", "", "Spawner_Concurrent_Count_ID", GameAttributeEncoding.Float32, 0, 0, 0, 32);
public static readonly GameAttributeF Skill_Override = new GameAttributeF(857, -1, -1, 0, 0, "", "", "Skill_Override", GameAttributeEncoding.Float32, 136, 0, 0, 32); public static readonly GameAttributeI Skill_Override = new GameAttributeI(857, -1, -1, 0, 0, "", "", "Skill_Override", GameAttributeEncoding.Int, 136, 0, 0, 32);
public static readonly GameAttributeF Walk_Passability_Power_SNO = new GameAttributeF(1057, -1, -1, 0, 0, "", "", "Walk_Passability_Power_SNO", GameAttributeEncoding.Float32, 0, 0, 0, 32); public static readonly GameAttributeF Walk_Passability_Power_SNO = new GameAttributeF(1057, -1, -1, 0, 0, "", "", "Walk_Passability_Power_SNO", GameAttributeEncoding.Float32, 0, 0, 0, 32);
public static readonly GameAttributeF Passability_Power_SNO = new GameAttributeF(1058, -1, -1, 0, 0, "", "", "Passability_Power_SNO", GameAttributeEncoding.Float32, 0, 0, 0, 32); public static readonly GameAttributeF Passability_Power_SNO = new GameAttributeF(1058, -1, -1, 0, 0, "", "", "Passability_Power_SNO", GameAttributeEncoding.Float32, 0, 0, 0, 32);
public static readonly GameAttributeF Flippy_ID = new GameAttributeF(1059, -1, -1, 0, 0, "", "", "Flippy_ID", GameAttributeEncoding.Float32, 0, 0, 0, 32); public static readonly GameAttributeF Flippy_ID = new GameAttributeF(1059, -1, -1, 0, 0, "", "", "Flippy_ID", GameAttributeEncoding.Float32, 0, 0, 0, 32);
@ -1511,9 +1511,11 @@ namespace DiIiS_NA.GameServer.MessageSystem
public static readonly GameAttributeB ForcedMove = new GameAttributeB(1401, 0, -1, 0, 0, "", "", "ForcedMove", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); public static readonly GameAttributeB ForcedMove = new GameAttributeB(1401, 0, -1, 0, 0, "", "", "ForcedMove", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1);
public static readonly GameAttributeB ReceivedPrimalWhenUnlocking = new GameAttributeB(1474, 0, -1, 0, 0, "", "", "ReceivedPrimalWhenUnlocking", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); public static readonly GameAttributeB ReceivedPrimalWhenUnlocking = new GameAttributeB(1474, 0, -1, 0, 0, "", "", "ReceivedPrimalWhenUnlocking", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1);
public static readonly GameAttributeB KanaiPowersunlocked = new GameAttributeB(1475, 0, -1, 0, 0, "", "", "KanaiPowersunlocked", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); public static readonly GameAttributeB KanaiPowersunlocked = new GameAttributeB(1475, 0, -1, 0, 0, "", "", "KanaiPowersunlocked", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1);
public static readonly GameAttributeB FourthKanaisCubeSlotunlocked = new GameAttributeB(1476, 0, -1, 0, 0, "", "", "Fourth Kanai's Cube Slot unlocked", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); public static readonly GameAttributeB FourthKanaisCubeSlotunlocked = new GameAttributeB(1476, 0, -1, 0, 0, "", "", "FourthKanai'sCubeSlotunlocked", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1);
public static readonly GameAttributeB Seasononlyitemsunlocked = new GameAttributeB(1477, 0, -1, 0, 0, "", "", "Season-onlyitemsunlocked", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); public static readonly GameAttributeB Seasononlyitemsunlocked = new GameAttributeB(1477, 0, -1, 0, 0, "", "", "Season-onlyitemsunlocked", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1);
public static readonly GameAttributeB Soul_shards_unlocked = new GameAttributeB(1478, 0, -1, 0, 0, "", "", "Soul shards unlocked", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); public static readonly GameAttributeB Soul_shards_unlocked = new GameAttributeB(1478, 0, -1, 0, 0, "", "", "Soulshardsunlocked", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1);
public static readonly GameAttributeB Item_was_sanctified = new GameAttributeB(1479, 0, -1, 0, 0, "", "", "Itemwassanctified", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1);
public static readonly GameAttributeB Sanctified_items_unlocked = new GameAttributeB(1480, 0, -1, 0, 0, "", "", "Sanctifieditemsunlocked", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1);
public static readonly GameAttributeF Fiil1 = new GameAttributeF(1223, -1, -1, 0, 0, "", "", "Fiil1", GameAttributeEncoding.Float32, 0, 0, 0, 32); public static readonly GameAttributeF Fiil1 = new GameAttributeF(1223, -1, -1, 0, 0, "", "", "Fiil1", GameAttributeEncoding.Float32, 0, 0, 0, 32);
public static readonly GameAttributeF Fiil2 = new GameAttributeF(1224, -1, -1, 0, 0, "", "", "Fiil2", GameAttributeEncoding.Float32, 0, 0, 0, 32); public static readonly GameAttributeF Fiil2 = new GameAttributeF(1224, -1, -1, 0, 0, "", "", "Fiil2", GameAttributeEncoding.Float32, 0, 0, 0, 32);

View File

@ -30,7 +30,7 @@ namespace DiIiS_NA.GameServer.MessageSystem.Message.Definitions.ACD
public int? /* sno */ snoAmbientOcclusionOverrideTex; public int? /* sno */ snoAmbientOcclusionOverrideTex;
public int? MarkerSetSNO; public int? MarkerSetSNO;
public int? MarkerSetIndex; public int? MarkerSetIndex;
public uint? TimeActorCreated; public uint? TimeActorCreated = null;
public EnterKnownLookOverrides EnterKnownLookOverrides; public EnterKnownLookOverrides EnterKnownLookOverrides;
public ACDEnterKnownMessage() : base(Opcodes.ACDEnterKnownMessage) { } public ACDEnterKnownMessage() : base(Opcodes.ACDEnterKnownMessage) { }
@ -39,7 +39,7 @@ namespace DiIiS_NA.GameServer.MessageSystem.Message.Definitions.ACD
{ {
ActorID = buffer.ReadUInt(32); ActorID = buffer.ReadUInt(32);
ActorSNOId = buffer.ReadInt(32); ActorSNOId = buffer.ReadInt(32);
Flags = buffer.ReadInt(8); Flags = buffer.ReadInt(9);
LocationType = buffer.ReadInt(2) + (-1); LocationType = buffer.ReadInt(2) + (-1);
if (buffer.ReadBool()) if (buffer.ReadBool())
{ {
@ -83,7 +83,7 @@ namespace DiIiS_NA.GameServer.MessageSystem.Message.Definitions.ACD
{ {
buffer.WriteUInt(32, ActorID); buffer.WriteUInt(32, ActorID);
buffer.WriteInt(32, ActorSNOId); buffer.WriteInt(32, ActorSNOId);
buffer.WriteInt(8, Flags); buffer.WriteInt(9, Flags);
buffer.WriteInt(2, LocationType - (-1)); buffer.WriteInt(2, LocationType - (-1));
buffer.WriteBool(WorldLocation != null); buffer.WriteBool(WorldLocation != null);
if (WorldLocation != null) if (WorldLocation != null)

View File

@ -0,0 +1,42 @@
using DiIiS_NA.GameServer.MessageSystem;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DiIiS_NA.D3_GameServer.MessageSystem.Message.Definitions.Dungeon
{
[Message(Opcodes.UberBossClosingMessage)]
public class UberBossClosingMessage : GameMessage
{
public int field0;
public int field1;
public UberBossClosingMessage() : base(Opcodes.UberBossClosingMessage) { }
public override void Parse(GameBitBuffer buffer)
{
field0 = buffer.ReadInt(32);
field1 = buffer.ReadInt(32);
}
public override void Encode(GameBitBuffer buffer)
{
buffer.WriteInt(32, field0);
buffer.WriteInt(32, field1);
}
public override void AsText(StringBuilder b, int pad)
{
b.Append(' ', pad);
b.AppendLine("SetDungeonJoinMessage:");
b.Append(' ', pad++);
b.AppendLine("{");
b.Append(' ', pad); b.AppendLine("field0: 0x" + field0.ToString("X8"));
b.Append(' ', pad); b.AppendLine("field1: 0x" + field1.ToString("X8"));
b.Append(' ', --pad);
b.AppendLine("}");
}
}
}

View File

@ -22,7 +22,7 @@ namespace DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Game
{ {
this.SNOPackHash = snoPacketHash; this.SNOPackHash = snoPacketHash;
this.ProtocolHash = protocol; this.ProtocolHash = protocol;
this.Version = "DiIiS Server - 2.7.3.82753"; this.Version = "DiIiS Server - 2.7.4.84161";
} }
public VersionsMessage() : base(Opcodes.VersionsMessage) { } public VersionsMessage() : base(Opcodes.VersionsMessage) { }

View File

@ -0,0 +1,49 @@
//Blizzless Project 2022
using System;
//Blizzless Project 2022
using System.Collections.Generic;
//Blizzless Project 2022
using System.Linq;
//Blizzless Project 2022
using System.Text;
//Blizzless Project 2022
using System.Threading.Tasks;
namespace DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Inventory
{
[Message(Opcodes.UnlockableRandomAffixMessage, Consumers.Inventory)]
public class UnlockableRandomAffixMessage : GameMessage
{
public uint ItemID; // Item's DynamicID
public int Field1;
public UnlockableRandomAffixMessage Affix;
public override void Parse(GameBitBuffer buffer)
{
ItemID = buffer.ReadUInt(32);
Field1 = buffer.ReadInt(32);
Affix.Parse(buffer);
}
public override void Encode(GameBitBuffer buffer)
{
buffer.WriteUInt(32, ItemID);
buffer.WriteInt(32, Field1);
Affix.Encode(buffer);
}
public override void AsText(StringBuilder b, int pad)
{
b.Append(' ', pad);
b.AppendLine("ChangeUsableItemMessage:");
b.Append(' ', pad++);
b.AppendLine("{");
b.Append(' ', pad); b.AppendLine("ItemID: 0x" + ItemID.ToString("X8") + " (" + ItemID + ")");
b.Append(' ', pad); b.AppendLine("Field1: 0x" + Field1.ToString("X8") + " (" + Field1 + ")");
b.Append(' ', --pad);
b.AppendLine("}");
}
}
}

View File

@ -0,0 +1,47 @@
//Blizzless Project 2022
using System;
//Blizzless Project 2022
using System.Collections.Generic;
//Blizzless Project 2022
using System.Linq;
//Blizzless Project 2022
using System.Text;
//Blizzless Project 2022
using System.Threading.Tasks;
namespace DiIiS_NA.GameServer.MessageSystem.Message.Fields
{
public class UnlockableRandomAffixProperties
{
public int field0;
public bool field1;
public void Parse(GameBitBuffer buffer)
{
field0 = buffer.ReadInt(32);
field1 = buffer.ReadBool();
}
public void Encode(GameBitBuffer buffer)
{
buffer.WriteInt(32, field0);
buffer.WriteBool(field1);
}
public void AsText(StringBuilder b, int pad)
{
b.Append(' ', pad);
b.AppendLine("UnlockableRandomAffixProperties:");
b.Append(' ', pad++);
b.AppendLine("{");
b.Append(' ', pad);
b.AppendLine("field0: 0x" + field0.ToString("X8"));
b.Append(' ', pad);
b.AppendLine("field1: 0x" + field1);
b.Append(' ', --pad);
b.AppendLine("}");
}
}
}

View File

@ -572,7 +572,7 @@ namespace DiIiS_NA.GameServer.MessageSystem
PlayerIndexMessage16 = 550,//SIZE 12 PlayerIndexMessage16 = 550,//SIZE 12
//*/ //*/
#endregion #endregion
#region 2.7.3 #region 2.7.4
ClientTryConsoleCommand = 1,//SIZE 1060 - Client ClientTryConsoleCommand = 1,//SIZE 1060 - Client
ServerTryConsoleCommand = 2,//SIZE 1060 - Server ServerTryConsoleCommand = 2,//SIZE 1060 - Server
QuitGameMessage = 3,//SIZE 12 QuitGameMessage = 3,//SIZE 12
@ -1111,10 +1111,10 @@ namespace DiIiS_NA.GameServer.MessageSystem
PlayerLoadoutTabIconMessage = 534, // //SIZE16 PlayerLoadoutTabIconMessage = 534, // //SIZE16
PlayerLoadoutSaveMessage1 = 535, // //SIZE68 PlayerLoadoutSaveMessage1 = 535, // //SIZE68
ANNDataMessage45 = 536, // //SIZE12 ANNDataMessage45 = 536, // //SIZE12
PlayerLoadoutDataMessage = 537, // //SIZE592 PlayerLoadoutDataMessage = 537, // //SIZE 808 - 2.7.4
PlayerLoadoutDataMessage1 = 538, // //SIZE592 PlayerLoadoutDataMessage1 = 538, // //SIZE 808 - 2.7.4
PlayerLoadoutTabIconMessage1 = 539, // //SIZE16 PlayerLoadoutTabIconMessage1 = 539, // //SIZE16
PlayerLoadoutEquipmentUpdateMessage = 540, // //SIZE48 PlayerLoadoutEquipmentUpdateMessage = 540, // //SIZE 64 - - 2.7.4
PlayerLoadoutEquipResultsMessage = 541, // //SIZE156 PlayerLoadoutEquipResultsMessage = 541, // //SIZE156
SwapSkillsMessage = 542, // //SIZE16 SwapSkillsMessage = 542, // //SIZE16
GBIDDataMessage5 = 543, // //SIZE12 GBIDDataMessage5 = 543, // //SIZE12
@ -1124,7 +1124,11 @@ namespace DiIiS_NA.GameServer.MessageSystem
DWordDataMessage18 = 547, // //SIZE12 DWordDataMessage18 = 547, // //SIZE12
ANNDataMessage46 = 548, // //SIZE12 ANNDataMessage46 = 548, // //SIZE12
DungeonFinderCompletionTimeMessage = 549, // //SIZE16 DungeonFinderCompletionTimeMessage = 549, // //SIZE16
IntDataMessage26 = 550, // //SIZE12 IntDataMessage26 = 550, // //SIZE 12
IntDataMessage27 = 551, // //SIZE 12 - 2.7.4
UberBossClosingMessage = 552, // //SIZE 16 - 2.7.4
PlayerIndexMessage16 = 551, // //SIZE 12 - 2.7.4
UnlockableRandomAffixMessage = 553, // //SIZE124 - 2.7.4
#endregion #endregion
} }
} }

View File

@ -84,7 +84,7 @@ namespace DiIiS_NA
public static string RESTSERVERIP = DiIiS_NA.REST.Config.Instance.IP; public static string RESTSERVERIP = DiIiS_NA.REST.Config.Instance.IP;
public static string PUBLICGAMESERVERIP = DiIiS_NA.GameServer.NATConfig.Instance.PublicIP; public static string PUBLICGAMESERVERIP = DiIiS_NA.GameServer.NATConfig.Instance.PublicIP;
public static int Build = 11; public static int Build = 29;
public static int Stage = 4; public static int Stage = 4;
public static string TypeBuild = "Beta"; public static string TypeBuild = "Beta";
public static bool D3CoreEnabled = DiIiS_NA.GameServer.Config.Instance.CoreActive; public static bool D3CoreEnabled = DiIiS_NA.GameServer.Config.Instance.CoreActive;
@ -100,7 +100,7 @@ namespace DiIiS_NA
string Name = $"Blizzless: Build {Build}, Stage: {Stage} - {TypeBuild}"; string Name = $"Blizzless: Build {Build}, Stage: {Stage} - {TypeBuild}";
Console.WriteLine(" " + Name); Console.WriteLine(" " + Name);
Console.WriteLine("Connected Module: 0x00 - Diablo 3 RoS 2.7.3.82785"); Console.WriteLine("Connected Module: 0x00 - Diablo 3 RoS 2.7.4.84161");
Console.WriteLine("------------------------------------------------------------------------"); Console.WriteLine("------------------------------------------------------------------------");
Console.ResetColor(); Console.ResetColor();
Console.Title = Name; Console.Title = Name;

View File

@ -175,7 +175,7 @@ namespace DiIiS_NA.REST
{ {
loginResult.AuthenticationState = "LOGIN"; loginResult.AuthenticationState = "LOGIN";
loginResult.ErrorCode = "UNABLE_TO_DECODE"; loginResult.ErrorCode = "UNABLE_TO_DECODE";
loginResult.ErrorMessage = "HEBEPHO! WRONG! English do you speak IT?!"; loginResult.ErrorMessage = "The information you have entered is not valid.";
SendResponse(HttpCode.BadRequest, loginResult); SendResponse(HttpCode.BadRequest, loginResult);
Logger.Error("Аутентификация неудалась: Логин - {0}. Cоединение с REST разорвано.", login); Logger.Error("Аутентификация неудалась: Логин - {0}. Cоединение с REST разорвано.", login);
} }